webentwicklung-frage-antwort-db.com.de

Wie muss ich _auth in .npmrc einstellen, wenn Sie einen Nexus-https-npm-Registrierungsproxy verwenden?

Kontext

  1. Meine .npmrc-Datei scheint korrekt gelesen zu werden (mit npm config ls -l sowohl von der Befehlszeile als auch vom Maven-Build aus geprüft).

  2. die Maschine, auf der npm ausgeführt wird, kann keine direkte Verbindung zum Netz herstellen, sie kann nur eine Verbindung zu einer Nexus npm-Registrierungs-URL herstellen. Daher werden die Proxy-Eigenschaften proxy und https-proxy nicht festgelegt.

  3. Da der Zugriff auf Nexus eingeschränkt ist, habe ich aus Nexus ein Zugriffstoken generiert. 

  4. Nexus-Sicherheits-Token bestehen aus einem Benutzernamen und einem Kennwort, die beide Zeichen wie / enthalten, die normalerweise "URL-codiert" sein müssen.

  5. erwartungsgemäß wird bei dieser Konfiguration bei der Ausführung von npm install kein Proxy erkannt.

  6. Der Nexus npm-Registrierungsproxy scheint korrekt eingestellt zu sein (ich kann sowohl auf json-Dateien zugreifen als auch tgz-Dateien mit einem Webbrowser herunterladen, nachdem ich die Verbindung mit dem generierten Token hergestellt habe.)

  7. Wenn ich registry auf http://registry.npmjs.org/ setze und _auth, email, always-auth, strict-ssl-Eigenschaften kommentiere und proxy und https-proxy-Konfiguration hinzufüge, funktioniert npm install wie erwartet (aber ich kann es nicht in der Zielumgebung)

Inhalt der .npmrc-Datei

; 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

Frage

Wie sollte ich die _auth-Eigenschaft ordnungsgemäß generieren, damit npm install wie erwartet funktioniert?

Ich habe es bisher versucht

  1. base64Encode (<username>:<password>)
    • führt zu npm info retry will retry, error on last attempt: Error: socket hang up
  2. base64Encode (urlencode (<username>:<password>))
    • führt zu 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>))
    • führt zu npm info retry will retry, error on last attempt: Error: socket hang up

Beim Abrufen des socket hang up-Fehlers habe ich die folgende Stapelablaufverfolgung:

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)

Beim Abrufen des This request requires auth credentials-Fehlers habe ich die folgende Stapelablaufverfolgung:

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)

Danke im Voraus.

20
Kraal

Nachdem ich registry-client-Code angesehen hatte, fand ich die Antwort, hier ist sie. Ich poste es, da es anderen Leuten helfen kann:

base64Encode(<username>:<password>)

Übrigens gibt es eine URL-Codierung, aber authify.js kümmert sich darum.

Das "Socket-Hang-Up" -Problem, mit dem ich konfrontiert bin, beruht auf der Tatsache, dass, wenn ein Proxy in der Windows-Konfiguration festgelegt ist, beim Starten von npm von der CLI (und nicht von einem Maven-Build) alle `` .npmrc``-Proxy-Einstellungen angezeigt werden Wird ignoriert, während native Proxy-Ausschlüsse (für Unternehmens-URLs) von npm ignoriert werden. Ich werde ein Ticket eröffnen, um dieses seltsame Verhalten zu melden.

4
Kraal
21
Peter Tseng

Ich weiß nichts über Nexus, aber wir verwenden artifactory als npm-Repo. Dort kann ich mein Auth-Token erstellen, indem ich base64encode(username:encryptedPassword) anrufe, wobei encryptedPassword das ist, das ich von meinem persönlichen Artifactory-Profil bekomme. 

Vielleicht hilft das.

1
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

Ich habe gerade einen Wrapper geschrieben, der die Anmeldeinformationen in Ihrem System-Schlüsselbund speichert und sie sofort zur Verfügung stellt. Check out: https://github.com/Xiphe/npm_keychain_auth

0
xiphe