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 :

  1. 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).

  2. 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');
Copy

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 demande iss.

Solution numéro 4

Vérifiez bien que la demande iss spécifie SHA256 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 à son NAME. 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 utilise myorg-account1 comme identificateur de compte, définissez la destination sur myorg-account1.snowflakecomputing.com.