Authentification par paires de clés : Dépannage¶
Cette rubrique vous aide à résoudre les erreurs qui se produisent lors de la connexion à Snowflake avec l”authentification par paire de clés. Elle se concentre sur les erreurs qui contiennent JWT token is invalid
.
Rechercher l’erreur¶
Avant de procéder au dépannage, vous devez déterminer si le problème entraîne une erreur JWT token is invalid
.
Si votre client Snowflake est un pilote ou un connecteur qui n’a pas d’interface interactive, utilisez les journaux pour examiner les erreurs de connexion :
Activez la journalisation du connecteur ou du pilote Snowflake. Pour des informations détaillées, voir Générer des fichiers journaux pour les pilotes et les connecteurs Snowflake (article de la base de connaissances Snowflake).
Vérifiez les erreurs qui contiennent la chaîne
JWT token is invalid
.Par exemple, un client utilisant le pilote JDBC Snowflake peut obtenir l’erreur suivante lorsqu’il tente d’utiliser l’authentification par paire de clés :
yyyy-mm-dd hh:mm:ss.nnn n.s.c.jdbc.SnowflakeSQLException FINE <init>:40 - Snowflake exception: JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a], sqlState:08001, vendorCode:390,144, queryId:
Récupérer des informations supplémentaires¶
Chaque erreur JWT token is invalid
est accompagnée d’un UUID qui apparaît entre parenthèses immédiatement après l’erreur (par exemple, JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a]
). Vous devez fournir l’UUID de l’erreur à un administrateur Snowflake afin qu’il puisse obtenir davantage d’informations sur l’erreur.
Les administrateurs utilisent la fonction SYSTEM$GET_LOGIN_FAILURE_DETAILS pour obtenir des détails supplémentaires sur l’erreur. Par exemple, pour obtenir des informations supplémentaires sur l’erreur JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a]
, un utilisateur titulaire du rôle ACCOUNTADIMN peut exécuter :
SELECT JSON_EXTRACT_PATH_TEXT(SYSTEM$GET_LOGIN_FAILURE_DETAILS('0ce9eb56-821d-4ca9-a774-04ae89a0cf5a'), 'errorCode');
La fonction JSON_EXTRACT_PATH_TEXT analyse la sortie JSON de la fonction SYSTEM$GET_LOGIN_FAILURE_DETAILS pour récupérer le code d’erreur et l’erreur.
Liste d’erreurs¶
La sortie de la fonction SYSTEM$GET_LOGIN_FAILURE_DETAILS est l’une des combinaisons code d’erreur/erreur suivantes.
Code d’erreur |
Erreur |
Description |
---|---|---|
390144 |
JWT_TOKEN_INVALID |
Le jeton JWT présente un problème général. Pour connaître les solutions possibles, voir Erreurs courantes et solutions. |
394300 |
JWT_TOKEN_INVALID_USER_IN_ISSUER |
Le nom d’utilisateur spécifié dans l’émetteur n’existe pas dans le compte Snowflake. Pour connaître les solutions possibles, voir Erreurs courantes et solutions. |
394301 |
JWT_TOKEN_MISSING_ISSUE_OR_EXPIRATION_TIME |
Le jeton JWT ne contient pas d’heure d’émission ou d’expiration. |
394302 |
JWT_TOKEN_INVALID_ISSUE_TIME |
Le jeton JWT a été reçu par Snowflake plus de 60 secondes après l’heure d’émission. Pour connaître les solutions possibles, voir Erreurs courantes et solutions. |
394303 |
JWT_TOKEN_INVALID_EXPIRATION_TIME |
Le jeton JWT a expiré. |
394304 |
JWT_TOKEN_INVALID_PUBLIC_KEY_FINGERPRINT_MISMATCH |
Il existe une incohérence entre l’empreinte digitale de la clé publique spécifiée dans l’émetteur et celle stockée pour l’utilisateur dans Snowflake. Pour connaître les solutions possibles, voir Erreurs courantes et solutions. |
394305 |
JWT_TOKEN_INVALID_ALGORITHM |
Le jeton JWT n’a pas été signé avec l’algorithme RS256. |
394306 |
JWT_TOKEN_INVALID_SIGNATURE |
Snowflake n’a pas pu vérifier la signature fournie par le jeton JWT. Il est possible que le jeton JWT ait été signé avec une clé privée qui n’est pas associée à la clé publique fournie. Il est également possible que la signature JWT soit corrompue ou qu’elle ait été modifiée. |
Erreurs courantes et solutions¶
Les erreurs les plus courantes associées à l’authentification par paire de clés sont les suivantes :
Utilisez les descriptions et solutions suivantes pour résoudre ces erreurs.
JWT_TOKEN_INVALID¶
- Description:
Le jeton JWT présente un problème général.
- Solution numéro 1:
Le jeton lui-même peut être malformé. Vérifiez bien que l’application qui accède à Snowflake génère des jetons JWT valides.
- Solution numéro 2:
Vérifiez que le client (pilote, connecteur ou URL de requête) utilise le bon identificateur de compte pour se connecter au compte Snowflake. Vous devez également vérifier que cette valeur correspond à l’identificateur de compte dans la demande
iss
.- Solution numéro 3:
Vérifiez bien que l’identificateur de compte et le nom d’utilisateur de la demande
sub
coïncident aux valeurs correspondantes dans la demandeiss
.- Solution numéro 4:
Vérifiez bien que la demande
iss
spécifieSHA256
comme algorithme de signature.
JWT_TOKEN_INVALID_PUBLIC_KEY_FINGERPRINT_MISMATCH¶
- Description:
Il existe une incohérence entre l’empreinte digitale de la clé publique spécifiée dans l’émetteur et celle stockée pour l’utilisateur dans Snowflake.
- Solution:
Obtenez l’empreinte digitale de la clé publique du jeton JWT, puis comparez-la à l’empreinte digitale associée à l’utilisateur dans Snowflake.
Une méthode, pour obtenir l’empreinte digitale du jeton JWT, consiste à activer la journalisation DEBUG du pilote et à essayer de se connecter. Recherchez le modèle
SHA256:<hash>
, où<hash>
est l’empreinte digitale de la clé publique.Pour obtenir l’empreinte digitale de la clé publique associée à l’utilisateur dans Snowflake, exécutez la commande DESCRIBE USER. L’empreinte digitale de la clé publique se trouve soit dans la propriété RSA_PUBLIC_KEY_FP, soit dans la propriété RSA_PUBLIC_KEY_2_FP. Si l’utilisateur n’a pas d’empreinte digitale de clé publique, exécutez la commande ALTER USER pour définir ces propriétés.
JWT_TOKEN_INVALID_USER_IN_ISSUER¶
- Description:
Le nom d’utilisateur spécifié dans l’émetteur n’existe pas dans le compte Snowflake.
- Solution:
Le nom d’utilisateur configuré dans le client Snowflake doit correspondre au
LOGIN_NAME
de l’utilisateur Snowflake et non à sonNAME
. Ces valeurs sont parfois différentes.Exécutez la commande DESCRIBE USER et vérifiez que la valeur de la propriété
LOGIN_NAME
correspond au nom d’utilisateur que le client Snowflake utilise pour se connecter.
JWT_TOKEN_INVALID_ISSUE_TIME¶
- Description:
Le jeton JWT a été reçu par Snowflake plus de 60 secondes après l’heure d’émission.
- Solution numéro 1:
Vérifier l’hôte sur lequel le pilote est exécuté pour vous assurer qu’il est synchronisé sur NTP et que l’horloge n’est pas décalée. Si l’horloge du serveur est décalée, Snowflake peut déterminer qu’il s’est écoulé plus de 60 secondes depuis l’heure d’émission du jeton, alors que ce n’est pas le cas. Par exemple, si le poste client a 30 secondes de retard et qu’il a fallu 45 secondes au jeton pour atteindre Snowflake, Snowflake détermine qu’il s’est écoulé 75 secondes depuis l’émission du jeton JWT, et non 45 secondes.
Vous pouvez vérifier que l’horloge du poste client indique l’heure exacte en la comparant à celle d’un serveur NTP. Par exemple, vous pouvez utiliser NIST Internet Time Servers pour synchroniser le poste client. Pour obtenir de l’aide afin de vérifier et de synchroniser l’horloge de votre hôte sur celle d’un serveur NTP, reportez-vous au guide de l’administrateur de votre système d’exploitation ou contactez un administrateur système.
- Solution numéro 2:
Utilisez un outil de surveillance spécifique à l’OSpour déterminer si l’erreur se produit pendant les périodes d’utilisation extrême de l’CPU/du disque.
- Solution numéro 3:
Vérifiez s’il existe une latence réseau excessive qui fait que le jeton JWT est traité par Snowflake plus de 60 secondes après le moment de l’émission du jeton.
Si vous utilisez un outil de diagnostic de connectivité pour mesurer la latence réseau, définissez la destination sur
account_identifier.snowflakecomputing.com
. Par exemple, si le client Snowflake utilisemyorg-account1
comme identificateur de compte, définissez la destination surmyorg-account1.snowflakecomputing.com
.