Cli: [BUG] La vérification d'intégrité échoue pour les packages NPM des artefacts Azure (et apparemment d'autres registres privés)

Créé le 14 sept. 2020  ·  40Commentaires  ·  Source: npm/cli

Comportement actuel:

Nous essayons de passer à NPM 7, mais nous rencontrons des problèmes avec l'obtention de packages à partir d'artefacts azure. Le journal suivant s'affiche lors de l'exécution de npm i --verbose :

npm WARN tarball tarball data for https://infolandcode.pkgs.visualstudio.com/_packaging/Shared/npm/registry/xxx/xxx.tgz (sha1-ZTIGEke6SQtyObZXul6THKgWSz0=) seems to be corrupted. Trying again.
npm WARN tarball tarball data for https://infolandcode.pkgs.visualstudio.com/_packaging/Shared/npm/registry/xxx/xxx.tgz (sha1-oYbrH56D5xdd2LzPKGiYWv/1Z9w=) seems to be corrupted. Trying again.
npm WARN tarball tarball data for https://infolandcode.pkgs.visualstudio.com/_packaging/Shared/npm/registry/xxx/xxx.tgz (sha1-ZTIGEke6SQtyObZXul6THKgWSz0=) seems to be corrupted. Trying again.
npm WARN tarball tarball data for https://infolandcode.pkgs.visualstudio.com/_packaging/Shared/npm/registry/xxx/xxx.tgz (sha1-oYbrH56D5xdd2LzPKGiYWv/1Z9w=) seems to be corrupted. Trying again.
npm timing reify:rollback:createSparse Completed in 2ms
npm timing reify:rollback:retireShallow Completed in 1ms
npm timing command:install Completed in 1784ms
npm verb stack Error: sha1-ZTIGEke6SQtyObZXul6THKgWSz0= integrity checksum failed when using sha1: wanted sha1-ZTIGEke6SQtyObZXul6THKgWSz0= but got sha512-1HAETTUJsxZ0ZT/s/kYXiDJgmm4bXD7co77wzewb4t8BBW7Vhk0ONkOs5orSToPCtu41U30n/e50gqTgia8anA== sha1-oCrDJJcm5EvGPkto9uzdg5hsPC0=. (307 bytes)

Comportement prévisible:

Je m'attends à ce que les packages soient téléchargés correctement, tout comme ils l'ont fait avec npm 6

Étapes à suivre pour reproduire:

Faites référence aux packages aux artefacts Azure dans votre package.json. Essayez d'exécuter npm install

attendu:
installer les packages

réel:
erreur comme indiqué ci-dessus

Environnement:

Bug Release 7.x Windows beta

Commentaire le plus utile

Nous avons publié la v7.0.0-rc.2 vendredi dernier et elle inclut quelques correctifs qui peuvent être liés à cela, pouvez-vous essayer de mettre à jour cette version avec npm i -g npm@next-7 et voir si votre problème est résolu?

Tous les 40 commentaires

Je reçois également cela avec le registre privé de Gemfury, mais la signature est un SHA512 dans mon cas.

NPM 6.14.6 et Yarn 1.22.5 fonctionnent correctement, mais NPM 7.0.0-beta.10 calcule une signature différente et échoue au contrôle d'intégrité.

Obtention également d'une telle erreur avec le registre privé et [email protected] .
L'installation avec [email protected] , [email protected] et [email protected] fonctionne correctement.

Obtenez également cela avec un package personnalisé installé à partir du registre github npm https://npm.pkg.github.com. J'espère que c'est une corrélation utile qui semble être liée au registre officiel non-npm. La rétrogradation de la version 7.0.0-beta.12 à la v6 a fonctionné.

integrity checksum failed when using sha512:
wanted sha512-X99IsgB5ElySriQwf/O4bimqNVHS9Wwij3KZLURUkC3dxO/028WcbiQRO2NtE2YJQgLkoFl8evwf0sR8jmxRFQ==
but got sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==

Comme il s'agit d'un package privé, je suis heureux de faire un zoom avec n'importe quel membre de l'équipe et de leur donner accès s'ils ne peuvent pas se reproduire indépendamment.

@jayphelps
J'ai testé la rétrogradation à 7.0.0-beta.6 mais cela ne m'a pas aidé. Le même problème:

npm ERR! sha1-ZTIGEke6SQtyObZXul6THKgWSz0= integrity checksum failed when using sha1: 
wanted sha1-ZTIGEke6SQtyObZXul6THKgWSz0= 
but got sha512-1HAETTUJsxZ0ZT/s/kYXiDJgmm4bXD7co77wzewb4t8BBW7Vhk0ONkOs5orSToPCtu41U30n/e50gqTgia8anA== sha1-oCrDJJcm5EvGPkto9uzdg5hsPC0=.

@PaulVrugt désolé, je voulais dire v6.xx, la version stable actuelle, pas une version bêta pour la v7

Nous avons potentiellement un correctif pour cela basé sur certains travaux @nlf est sur le point d' intermédiaire . Je vais le laisser faire un suivi pour confirmer une fois que nous aurons cela pour que vous essayiez de vous reproduire.

Nous avons publié la v7.0.0-rc.2 vendredi dernier et elle inclut quelques correctifs qui peuvent être liés à cela, pouvez-vous essayer de mettre à jour cette version avec npm i -g npm@next-7 et voir si votre problème est résolu?

Installé [email protected] et la vérification d'intégrité échoue toujours.

@nlf rc.2 a résolu le problème pour moi, ou du moins le problème "a disparu". Je vous remercie!

Je ne sais pas pourquoi cela a résolu mon problème, mais pas pour @ leandro-manifesto. C'est malheureux.

Juste pour être sûr que j'ai relancé npm i comme avant, avec un cache propre, des node_modules vides et pas de package-lock.json ou yarn.lock.
Cela ne fonctionnait toujours pas.

Voici le journal: https://gist.github.com/leandro-manifesto/50bffbfb2af4d433630d388310923af3

Je jetterai un coup d'oeil le matin pour voir si c'est résolu pour nous

@nlf J'ai mis à jour RC2 et j'ai bien peur que le problème persiste, tout comme avec @ leandro-manifesto

Bonjour, @jayphelps. Je voudrais m'associer avec vous pour diagnostiquer ce problème. Y a-t-il un moment opportun pour vous demain (mercredi 7 octobre)? (Veuillez inclure le fuseau horaire.)

@bonkydog jayphelps a déclaré que son problème avait disparu avec rc2

@PaulVrugt Serait-il possible de partager les fichiers tarball et package.json téléchargés pour les packages signalés comme corrompus? Cela pourrait nous aider à comprendre ce qui se passe.

Il fait nuit ici maintenant. Je suis à gmt + 2. Je jetterai un œil le matin à ce que je peux partager

OK merci!

@bonkydog

J'ai joint l'archive tar de l'un des packages échouant. Est-ce ce que vous recherchez? Je doute que le problème ait quelque chose à voir avec l'archive tar elle-même, car tous les paquets téléchargés à partir d'artefacts azure semblent échouer. J'ai également inclus le fichier journal de la tentative d'installation

L'erreur exacte:

npm WARN tarball tarball data for https://xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/@xxx/testmonkey-integration-script/-/testmonkey-integration-script-1.0.1.tgz (sha1-ZTIGEke6SQtyObZXul6THKgWSz0=) seems to be corrupted. Trying again.
npm WARN tarball tarball data for https://xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/@xxx/testmonkey-integration-script/-/testmonkey-integration-script-1.0.1.tgz (sha1-ZTIGEke6SQtyObZXul6THKgWSz0=) seems to be corrupted. Trying again.
npm ERR! code EINTEGRITY
npm ERR! sha1-ZTIGEke6SQtyObZXul6THKgWSz0= integrity checksum failed when using sha1: wanted sha1-ZTIGEke6SQtyObZXul6THKgWSz0= but got sha512-1HAETTUJsxZ0ZT/s/kYXiDJgmm4bXD7co77wzewb4t8BBW7Vhk0ONkOs5orSToPCtu41U30n/e50gqTgia8anA== sha1-oCrDJJcm5EvGPkto9uzdg5hsPC0=. (307 bytes)

testmonkey-integration-script-1.0.1.tgz.zip
2020-10-08T06_31_09_578Z-debug.log

Merci, Paul!

Vous voulez toujours vous associer? Mon problème a disparu pour une raison quelconque.

nous avons publié la v7.0.0-rc.4 aujourd'hui qui, je crois, résoudra ce problème.

vous pouvez mettre à jour avec npm i -g npm@next-7 et s'il vous plaît laissez-nous savoir comment cela se passe.

Je soupçonne qu'au moins certains d'entre vous vont avoir des erreurs différentes maintenant, mais elles seront un meilleur indicateur de ce qui ne va pas!

Cool! Je vais essayer et vous informer des résultats

Hé, testé avec 7.0.0-rc.4 , et maintenant j'obtiens 404 lors de la récupération de l'archive tar (les autres requêtes sont ok).

Je ne suis pas sûr que Gemfury rejette l'autorisation ou s'il s'agit vraiment d'une mauvaise URL.

Si vous curl l'URL (ou essayez de la récupérer avec un navigateur), cela fonctionne-t-il? Si tel est le cas, cela ressemble à un problème d'authentification

@nlf Cela semble en effet être un problème d'authentification. Nous obtenons une réponse 401 en essayant de télécharger des packages à partir de notre registre privé. Nous utilisons le package vsts-npm-auth pour nous authentifier, mais cela ne semble pas fonctionner avec npm 7. Est-ce un problème avec npm 7 ou vsts-npm-auth ?

la documentation dans Azure devops indique:
Ajoutez un .npmrc à votre projet, dans le même répertoire que votre package.json

registry=https://pkgs.dev.azure.com/xxx_packaging/xxx/npm/registry/ 
always-auth=true

Ensuite, exécutez vsts-npm-auth pour obtenir un jeton Azure Artifacts ajouté à votre fichier .npmrc de niveau utilisateur

vsts-npm-auth -config .npmrc

Je ne connais pas du tout ce package et je ne parviens pas à trouver de code que je pourrais examiner, donc je ne suis pas sûr.

Savez-vous s'il existe des détails d'implémentation documentés quelque part? Comment modifie-t-il le fichier .npmrc lorsque vous l'exécutez? Pouvez-vous partager le fichier .npmrc ? Assurez-vous de supprimer d'abord les jetons d'authentification.

Je ne trouve aucune information à ce sujet non plus. Je publierai un sujet dans le github Microsoft à ce sujet et le lierai ici. Le .npmrc n'est pas modifié, il contient simplement l'url du registre où il doit obtenir les paquets.

Il n'ajoute pas de ligne comme //pkgs.dev.azure.com/:_authToken=YOURTOKENHERE ?

Si ce n'est pas le cas, et que cela ne fait pas quelque chose comme le remplacement de l'URL du registre par un proxy qui effectue l'authentification pour vous, il est probable que l'authentification échoue car nous ne sommes pas en mesure de déterminer comment effectuer réellement l'authentification car elle n'est configurée nulle part. .

Je pense que le suivi avec cette équipe est la bonne voie à suivre. Veuillez nous contacter et nous verrons ce que nous pouvons faire pour que cela fonctionne correctement.

Non, cela n'ajoute rien au fichier .npmrc , donc il se raccorde probablement ailleurs. Je suis revenu à npm6, puis l'authentification fonctionne comme prévu, et toujours aucun changement dans le fichier .npmrc . Comme vous pouvez le voir, j'ai enregistré un problème avec Microsoft. Voyons ce qu'ils proposent

Éditer:
Comme indiqué dans l'article ci-dessous, il modifie le fichier .npmrc , mais uniquement le fichier .npmrc dans le profil utilisateur

@nlf
L'intrigue s'épaissit un peu. J'ai essayé d'utiliser le .npmrc pour l'authentification sans utiliser le package vsts-npm-auth . Le contenu du .npmrc est maintenant:

<strong i="9">@xxx</strong>:registry=https://xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/

//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:username=VssToken
//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:_password=***
//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:email=VssEmail
//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:always-auth=true

et lors de l'installation des packages, je vois que cela reconnaît l'authentification, car elle répertorie la même chose que ce qui précède dans le journal. Mais l'authentification échoue toujours. Avec la même configuration, npm 6 fonctionne comme un charme.

963 verbose stack Error: Unable to authenticate, need: Bearer authorization_uri=https://login.windows.net/<guid>, Basic realm="https://pkgsprodsu3weu.app.pkgs.visualstudio.com/", TFS-Federated
963 verbose stack     at C:\npm\prefix\node_modules\npm\node_modules\npm-registry-fetch\check-response.js:113:17
963 verbose stack     at processTicksAndRejections (internal/process/task_queues.js:97:5)
964 verbose statusCode 401
965 verbose pkgid https://xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/@xxx/testmonkey-integration-script/-/testmonkey-integration-script-1.0.1.tgz

Donc, même sans vsts-npm-auth l'authentification semble échouer si nous ajoutons l'authentification au fichier .npmrc

Mise à jour :
J'ai découvert que le package vsts-npm-auth injecte les informations d'identification dans le fichier utilisateur .npmrc (situé à% userprofile% .npmrc). Le contenu du fichier utilisateur .npmrc est:

//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:username=VssSessionToken
; This is an unencrypted authentication token. Treat it like a password. DO NOT share this value with anyone, including Microsoft support.
//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:_password=xxx
; The npm client won't use username and _password without an email set, but the service doesn't use the email value. The following is an arbitrarily made-up address.
//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:[email protected]

Donc je pense que cela signifie que l'authentification est correctement définie dans le fichier .npmrc , mais npm 7 ne l'utilise pas d'une manière ou d'une autre, bien que lorsque je vérifie la journalisation, le fichier .npmrc du profil utilisateur EST chargé pendant npm install

je pense voir un bogue dans le code .. essayez de supprimer le segment de chemin de votre URL de registre pour les valeurs de configuration, mais gardez-le en place pour la ligne registry= et faites-moi savoir si cela aide

alors

<strong i="8">@xxx</strong>:registry=https://xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/
//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:username=VssSessionToken
//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:_password=xxx
//xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/:[email protected]

devient

<strong i="12">@xxx</strong>:registry=https://xxx.pkgs.visualstudio.com/_packaging/Shared/npm/registry/
//xxx.pkgs.visualstudio.com/:username=VssSessionToken
//xxx.pkgs.visualstudio.com/:_password=xxx
//xxx.pkgs.visualstudio.com/:[email protected]

@nlf

Je l'ai essayé, mais cela ne semble faire aucune différence. L'erreur reste exactement la même :(

Merci d'avoir essayé, je vais continuer à chercher et voir si je peux comprendre ce qui se passe

Pour écarter tout problème d'authentification, puis-je vous demander d'essayer une dernière chose ...

La valeur après _password doit être encodée en base64, pouvez-vous le décoder et essayer de faire la demande en utilisant curl avec le nom d'utilisateur et le mot de passe dans la configuration et voir si vous recevez la même erreur 401?

Vous pouvez décoder la base64 avec quelque chose comme:

node -pe "Buffer.from('xxx', 'base64').toString('utf8')"

qui vous donnera un mot de passe en texte brut, après quoi quelque chose comme

curl -svo /dev/null 'https://username:[email protected]/to/the/file'

devrait imprimer tous les en-têtes de réponse et le code d'état.

Si cela renvoie également un 401, le problème est en dehors de la portée de npm, mais si cela fonctionne, il semblerait que nous gérons mal l'authentification quelque part.

J'ai quelques jours de congé en ce moment, mais je vais essayer de tenter le coup aujourd'hui ou demain si ma femme et mes enfants me le permettent 😉

Alors, j'ai trouvé le temps. Et en suivant vos instructions, voyez le résultat de la commande Curl ci-dessous. Il renvoie un 303 avec une redirection. Lorsque je change le mot de passe dans la commande curl, il renvoie un 401. Les informations d'identification semblent donc bien.

Edit : Lors de l'ajout de l'indicateur --location, il suit en fait la redirection et télécharge le package

*   Trying 13.107.42.18...
* TCP_NODELAY set
* Connected to xxx.pkgs.visualstudio.com (13.107.42.18) port 443 (#0)
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 1/3)
* schannel: checking server certificate revocation
* schannel: sending initial handshake data: sending 199 bytes...
* schannel: sent initial handshake data: sent 199 bytes
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 2/3)
* schannel: encrypted data got 4096
* schannel: encrypted data buffer: offset 4096 length 4096
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 2/3)
* schannel: encrypted data got 1024
* schannel: encrypted data buffer: offset 5120 length 5120
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 2/3)
* schannel: encrypted data got 1024
* schannel: encrypted data buffer: offset 6144 length 6144
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 2/3)
* schannel: encrypted data got 1024
* schannel: encrypted data buffer: offset 7168 length 7168
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 2/3)
* schannel: encrypted data got 858
* schannel: encrypted data buffer: offset 8026 length 8192
* schannel: sending next handshake data: sending 158 bytes...
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 2/3)
* schannel: encrypted data got 326
* schannel: encrypted data buffer: offset 326 length 8192
* schannel: SSL/TLS handshake complete
* schannel: SSL/TLS connection with xxx.pkgs.visualstudio.com port 443 (step 3/3)
* schannel: stored credential handle in session cache
* Server auth using Basic with user 'VssSessionToken'
> GET /_packaging/Shared/npm/registry/@xxx/testmonkey-integration-script/-/testmonkey-integration-script-1.0.1.tgz HTTP/1.1
> Host: xxx.pkgs.visualstudio.com
> Authorization: Basic xxx
> User-Agent: curl/7.55.1
> Accept: */*
>
* schannel: client wants to read 102400 bytes
* schannel: encdata_buffer resized 103424
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: encrypted data got 1415
* schannel: encrypted data buffer: offset 1415 length 103424
* schannel: decrypted data length: 1386
* schannel: decrypted data added: 1386
* schannel: decrypted data cached: offset 1386 length 102400
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: decrypted data buffer: offset 1386 length 102400
* schannel: schannel_recv cleanup
* schannel: decrypted data returned 1386
* schannel: decrypted data buffer: offset 0 length 102400
< HTTP/1.1 303 See Other
< Cache-Control: no-cache
< Pragma: no-cache
< Expires: -1
< Location: https://6egvsblobprodsu6weus36.blob.core.windows.net/b-7e5e1ac1118b4eadb4ae3f7165fe853c/1BEED41088483DAD90BC884E56E505D859406194F791A91CF57C09DE12BF9EA600.blob?sv=2019-02-02&sr=b&si=1&sig=cJbL3x91u3lvZnkhnR8d1sv2Umt42e3XnKbZ8FRONk0%3D&spr=https&se=2020-10-15T11%3A58%3A38Z&rscl=x-e2eid-f74f2a7d-d8c74d81-88cc7903-9595d8bd-session-f74f2a7d-d8c74d81-88cc7903-9595d8bd&rscd=attachment%3B%20filename%3D%22testmonkey-integration-script-1.0.1.tgz%22
< P3P: CP="CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT"
< X-TFS-ProcessId: d416e68c-4fd0-4669-85eb-03855ef00a73
< Strict-Transport-Security: max-age=31536000; includeSubDomains
< ActivityId: f74f2a7d-d8c7-4d81-88cc-79039595d8bd
< X-TFS-Session: f74f2a7d-d8c7-4d81-88cc-79039595d8bd
< X-VSS-E2EID: f74f2a7d-d8c7-4d81-88cc-79039595d8bd
< X-VSS-UserData: 8b69620c-dc8f-6e39-b800-b63402c40d6b:[email protected]
< X-FRAME-OPTIONS: SAMEORIGIN
< X-Packaging-Migration: NpmBlobMetadata
< Request-Context: appId=cid-v1:f5d75a35-28cc-4e72-8007-1cf59e01402f
< Access-Control-Expose-Headers: Request-Context
< X-Content-Type-Options: nosniff
< X-MSEdge-Ref: Ref A: D211137342504A3090A2E577451F4315 Ref B: BRU30EDGE0320 Ref C: 2020-10-14T11:58:34Z
< Date: Wed, 14 Oct 2020 11:58:34 GMT
< Content-Length: 0
<
* Connection #0 to host xxx.pkgs.visualstudio.com left intact

ok @PaulVrugt Je pense que nous l'avons enfin. nous avons publié la version 7.0.1 hier soir, que vous pouvez installer avec les npm i -g npm@next-7 habituels et que nous espérons résoudre cela pour vous.

s'il vous plaît laissez-moi savoir comment ça se passe!

@nlf vous

@nlf Je suis confronté au même problème avec npm v7.0.3 voici une sortie de ce que je reçois
npm http fetch GET 200 https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.778.0.tgz 31307ms npm timing reifyNode:node_modules/serverless/node_modules/aws-sdk Completed in 34351ms npm timing reify:rollback:createSparse Completed in 0ms npm timing reify:rollback:retireShallow Completed in 1ms npm timing command:install Completed in 36218ms npm verb stack Error: TAR_BAD_ARCHIVE: Unrecognized archive format npm verb stack at Unpack.warn (/usr/local/lib/node_modules/npm/node_modules/tar/lib/warn-mixin.js:19:40) npm verb stack at Unpack.warn (/usr/local/lib/node_modules/npm/node_modules/tar/lib/unpack.js:188:18) npm verb stack at Unpack.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/tar/lib/parse.js:82:14) npm verb stack at Unpack.emit (node:events:339:22) npm verb stack at Unpack.[emit] (/usr/local/lib/node_modules/npm/node_modules/tar/lib/parse.js:286:12) npm verb stack at Unpack.[maybeEnd] (/usr/local/lib/node_modules/npm/node_modules/tar/lib/parse.js:402:17) npm verb stack at Unpack.[consumeChunk] (/usr/local/lib/node_modules/npm/node_modules/tar/lib/parse.js:434:21) npm verb stack at Unpack.write (/usr/local/lib/node_modules/npm/node_modules/tar/lib/parse.js:365:25) npm verb stack at Unpack.end (/usr/local/lib/node_modules/npm/node_modules/tar/lib/parse.js:479:14) npm verb stack at Yallist.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/minipass/index.js:396:18)

Cette page vous a été utile?
0 / 5 - 0 notes