web-dev-qa-db-ja.com

Nexus https npmレジストリプロキシを使用する場合、.npmrcで_authを設定するにはどうすればよいですか?

コンテキスト

  1. .npmrcファイルは正しく読み取られているようです(コマンドラインとMavenビルドの両方からnpm config ls -lでチェックされています)。

  2. npmが実行されているマシンはネットに直接接続できません。NexusnpmレジストリURLにのみ接続できます。したがって、プロキシプロパティproxyおよびhttps-proxyは設定されません。

  3. Nexusへのアクセスが制限されているため、Nexus内からアクセストークンを生成しました。

  4. Nexusセキュリティトークンは、通常「URLエンコード」する必要がある/などの文字を含むユーザー名とパスワードから作成されます

  5. 予想どおり、この構成では、npm installの実行時にプロキシが検出されません。

  6. Nexus npmレジストリプロキシが正しく設定されているようです(生成されたトークンを使用して接続した後、Webブラウザを使用してjsonファイルにアクセスし、tgzファイルをダウンロードできます)

  7. registryhttp://registry.npmjs.org/に設定し、_authemailalways-authstrict-sslプロパティをコメントし、proxyおよびhttps-proxy構成を追加すると、npm installは期待どおりに動作します(ただし、_ターゲット環境で)

.npmrcファイルの内容

; Nexus proxy registry pointing to http://registry.npmjs.org/
registry = https://<Host>/nexus/content/repositories/npmjs-registry/ 

; base64 encoded authentication token
_auth = <see question below>

; required by Nexus
email = <valid email>

; force auth to be used for GET requests
always-auth = true

; we don't want to put certificates in .npmrc
strict-ssl = false

loglevel = silly

質問

_authが期待どおりに機能するようにするには、どのようにnpm installプロパティを適切に生成する必要がありますか?

これまで試しました

  1. base64Encode(<username>:<password>
    • npm info retry will retry, error on last attempt: Error: socket hang upになります
  2. base64Encode(urlencode(<username>:<password>))
    • npm info retry will retry, error on last attempt: Error: This request requires auth credentials. Run `npm login` and repeat the request.になります
  3. base64Encode(urlencode(<username>:urlencode(<password>))
    • npm info retry will retry, error on last attempt: Error: socket hang upになります

socket hang upエラーを取得すると、次のスタックトレースがあります。

http request GET https://<Host>/nexus/content/repositories/npmjs-registry/fsevents
sill fetchPackageMetaData Error: socket hang up
sill fetchPackageMetaData     at TLSSocket.onHangUp (_tls_wrap.js:1035:19)
sill fetchPackageMetaData     at TLSSocket.g (events.js:260:16)
sill fetchPackageMetaData     at emitNone (events.js:72:20)
sill fetchPackageMetaData     at TLSSocket.emit (events.js:166:7)
sill fetchPackageMetaData     at endReadableNT (_stream_readable.js:905:12)
sill fetchPackageMetaData     at doNTCallback2 (node.js:441:9)
sill fetchPackageMetaData     at process._tickCallback (node.js:355:17)
sill fetchPackageMetaData  error for [email protected]^1.0.0 { [Error: socket hang up] code: 'ECONNRESET' }
WARN install Couldn't install optional dependency: socket hang up
verb install Error: socket hang up
verb install     at TLSSocket.onHangUp (_tls_wrap.js:1035:19)
verb install     at TLSSocket.g (events.js:260:16)
verb install     at emitNone (events.js:72:20)
verb install     at TLSSocket.emit (events.js:166:7)
verb install     at endReadableNT (_stream_readable.js:905:12)
verb install     at doNTCallback2 (node.js:441:9)
verb install     at process._tickCallback (node.js:355:17)

This request requires auth credentialsエラーを取得すると、次のスタックトレースがあります。

npm sill fetchPackageMetaData Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm sill fetchPackageMetaData     at CachingRegistryClient.authify (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\authify.js:17:14)
npm sill fetchPackageMetaData     at CachingRegistryClient.makeRequest (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:103:17)
npm sill fetchPackageMetaData     at <root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:66:17
npm sill fetchPackageMetaData     at RetryOperation._fn (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\attempt.js:18:5)
npm sill fetchPackageMetaData     at null._onTimeout (<root>\ui\target\node\node_modules\npm\node_modules\retry\lib\retry_operation.js:49:10)
npm sill fetchPackageMetaData     at Timer.listOnTimeout (timers.js:92:15)
npm sill fetchPackageMetaData  error for [email protected]^1.0.0 [Error: This request requires auth credentials. Run `npm login` and repeat the request.]
npm WARN install Couldn't install optional dependency: This request requires auth credentials. Run `npm login` and repeat the request.
npm verb install Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm verb install     at CachingRegistryClient.authify (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\authify.js:17:14)
npm verb install     at CachingRegistryClient.makeRequest (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:103:17)
npm verb install     at <root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:66:17
npm verb install     at RetryOperation._fn (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\attempt.js:18:5)
npm verb install     at null._onTimeout (<root>\ui\target\node\node_modules\npm\node_modules\retry\lib\retry_operation.js:49:10)
npm verb install     at Timer.listOnTimeout (timers.js:92:15)

前もって感謝します。

23
Kraal

registry-clientコードを見て、答えを見つけました。ここにあります。他の人に役立つかもしれないので投稿します:

base64Encode(<username>:<password>)

ところで、URLエンコードがありますが、それはauthify.jsが処理します。

私が直面している「ソケットがハングアップする」問題は、プロキシがWindows設定で設定されている場合、CLIから(およびMavenビルドからではなく)npmを起動すると、すべての `` `.npmrc ``プロキシ設定は無視されるようですが、ネイティブプロキシの除外(企業URLの場合)はnpmによって無視されます。この奇妙な動作を報告するためにチケットを開きます。

5
Kraal
26
Peter Tseng

Nexusについては知りませんが、npmリポジトリとしてアーティファクトを使用し、base64encode(username:encryptedPassword)を呼び出してencryptedPasswordを個人のアーティファクトから取得して認証トークンを作成できますプロフィール。

たぶんこれが役立ちます。

2
Before you run npm login, please follow the instructions below :

1) Create an ~/.npmrc file with the following contents:

registry=https://example.com/repository/npm-group/
[email protected]
always-auth=true
//example.com/repository/npm-group/:_authToken=

2) run `npm login`

# npm login
Username: firstname.lastname
Password: 
Email: (this IS public) [email protected]
Logged in as firstname,lastname on https://example.com/repository/npm-group/.

Use the same password you use to login to example.com
1
Ryan Augustine

システムのキーチェーンに資格情報を保存し、その場で提供するラッパーを作成しました。チェックアウト: https://github.com/Xiphe/npm_keychain_auth

0
xiphe