Authentification auprès du serveur¶
Cette rubrique décrit comment s’authentifier auprès du serveur lors de l’utilisation de l’API SQL de Snowflake.
Lorsque vous envoyez une requête, celle-ci doit inclure des informations d’authentification. Les sections suivantes expliquent comment ajouter ces informations à la requête :
Utilisation de OAuth¶
Pour utiliser OAuth, suivez les étapes suivantes :
Configurez OAuth pour l’authentification.
Voir Introduction à OAuth pour plus de détails sur la façon de configurer OAuth et d’obtenir un jeton OAuth.
Utilisez Snowflake CLI pour vérifier que vous pouvez utiliser un jeton OAuth généré pour vous connecter à Snowflake :
Pour les systèmes Linux et MacOS
Pour les systèmes Windows
Dans chaque requête d’API que vous envoyez, définissez les en-têtes suivants :
Authorization: Bearer oauth_tokenoù
oauth_tokenest le jeton OAuth généré.(Facultatif)
X-Snowflake-Authorization-Token-Type: OAUTHSi vous omettez l’en-tête
X-Snowflake-Authorization-Token-Type, Snowflake détermine le type de jeton en examinant le jeton.Bien que cet en-tête soit facultatif, vous pouvez choisir de le spécifier. Vous pouvez définir l’en-tête sur l’une des valeurs suivantes :
KEYPAIR_JWT(pour l’authentification par paire de clés)OAUTH(pour OAuth)PROGRAMMATIC_ACCESS_TOKEN(pour les jetons d’accès programmatiques)
Utilisation de l’authentification par paire de clés¶
Pour utiliser l’authentification par paire de clés, suivez ces étapes :
Configurez l’authentification par paire de clés.
Dans le cadre de ce processus, vous devez :
Générer une paire de clés publique-privée. La clé privée générée doit se trouver dans un fichier (par exemple, nommé
rsa_key.p8).Attribuez la clé publique à votre utilisateur Snowflake. Après avoir attribué la clé à l’utilisateur, exécutez la commande DESCRIBE USER. Dans la sortie, la propriété
RSA_PUBLIC_KEY_FPdoit être définie comme l’empreinte de la clé publique attribuée à l’utilisateur.
Pour des instructions sur la façon de générer la paire de clés et d’attribuer une clé à un utilisateur, voir Authentification par paire de clés et rotation de paires de clés. Pour des exemples de création d’une empreinte et de la génération d’un jeton JWT spécifiques à un langage, voir ce qui suit :
Utilisez Snowflake CLI pour vérifier que vous pouvez utiliser la clé privée générée pour vous connecter à Snowflake :
La commande vous demande une phrase secrète de clé privée pour terminer la connexion. Vous pouvez éviter l’invite en fournissant la phrase secrète dans la variable d’environnement
PRIVATE_KEY_PASSPHRASE.Dans le code de votre application :
Générez l’empreinte digitale (un hachage SHA-256) de la clé publique de l’utilisateur. Préfixez l’empreinte digitale avec
SHA256:. Par exemple :SHA256:hashVous pouvez également exécuter la commande SQL DESCRIBE USER pour obtenir la valeur de la propriété RSA_PUBLIC_KEY_FP.
Générez un jeton Web JSON (JWT) avec les champs suivants dans la charge utile :
Champ
Description
Exemple
issÉmetteur du JWT. Réglez-le sur la valeur suivante :
account_identifier.user.SHA256:public_key_fingerprintoù :
account_identifierest votre identificateur de compte Snowflake.Si vous utilisez le localisateur de compte, excluez toute information sur la région du localisateur de compte.
userest votre nom d’utilisateur Snowflake.SHA256:public_key_fingerprintest l’empreinte de la clé que vous avez générée à l’étape précédente.
Note
Les valeurs
account_identifieretuserdoivent utiliser tous les caractères majuscules. Si votre ID de compte contient des points (.), vous devez les remplacer par des traits d’union (-), car les points dans un identificateur de compte rendent le JWT non valide.MYORGANIZATION-MYACCOUNT.MYUSER.SHA256:public_key_fingerprintsubObjet pour le JWT. Réglez-le sur la valeur suivante :
account_identifier.userMYORGANIZATION-MYACCOUNT.MYUSERiatHeure d’émission pour les JWT au format UTC. Définissez la valeur de l’heure actuelle en secondes ou en millisecondes.
1615370644(secondes) .1615370644000(millisecondes)expHeure d’expiration pour les JWT au format UTC. Vous pouvez spécifier la valeur en secondes ou en millisecondes.
Note
Le JWT est valide au maximum une heure après l’émission du jeton, même si vous spécifiez un délai d’expiration plus long.
1615374184(secondes) .1615374184000(millisecondes)Dans chaque requête API que vous envoyez, définissez les en-têtes suivants :
Authorization: Bearer JWToù
JWTest le jeton que vous avez généré.(Facultatif)
X-Snowflake-Authorization-Token-Type: KEYPAIR_JWTSi vous omettez l’en-tête
X-Snowflake-Authorization-Token-Type, Snowflake détermine le type de jeton en examinant le jeton.Bien que cet en-tête soit facultatif, vous pouvez choisir de le spécifier. Vous pouvez définir l’en-tête sur l’une des valeurs suivantes :
KEYPAIR_JWT(pour l’authentification par paire de clés)OAUTH(pour OAuth)PROGRAMMATIC_ACCESS_TOKEN(pour les jetons d’accès programmatiques)
Exemple Python¶
Les sections suivantes décrivent comment générer un JWT et une empreinte à l’aide de Python.
Pour un exemple de génération d’un JWT en Python, voir sql-api-generate-jwt.py. L’exemple sql-api-generate-jwt.py utilise le module PyJWT, que vous pouvez installer en exécutant :
Génération d’un jeton JWT en Python¶
Les sections de code suivantes démontrent comment générer un JWT. Pour un exemple complet, voir sql-api-generate-jwt.py.
Note
Cet exemple est destiné à servir de référence uniquement. N’utilisez pas ce code dans des applications ou des environnements de production.
Génération d’une empreinte en Python¶
Les sections de code suivantes montrent comment générer l’empreinte digitale. Pour un exemple complet, voir sql-api-generate-jwt.py.
Exemple Snowflake CLI¶
Vous pouvez utiliser la commande Snowflake CLI snow connection generate-jwt pour générer un JWT pour l’authentification par paire de clés. Pour plus d’informations, voir snow connection generate-jwt.
Cet exemple génère un jeton pour le compte TEST et l’utilisateur JDOE, en utilisant la clé privée de rsa_key.p8 :
La commande vous demande une phrase secrète de clé privée pour terminer la connexion. Vous pouvez éviter l’invite en fournissant la phrase secrète dans la variable d’environnement PRIVATE_KEY_PASSPHRASE.
Exemple Java¶
Pour un exemple de génération d’un jeton JWT en Java, voir SimpleStatementsApi.java.
Note
Cet exemple est destiné à servir de référence uniquement. N’utilisez pas ce code dans des applications ou des environnements de production.
Cet exemple utilise les bibliothèques tierces suivantes :
Swagger Codegen : une bibliothèque open source utile pour le développement d’APIs REST et d’applications.
Auth0 : fournit des APIs Java pour l’authentification et la génération de jetons JWT.
Exemple Node.js¶
Pour un exemple de génération d’un JWT en Node.js, voir sql-api-generate-jwt.js.
Note
Cet exemple est destiné à servir de référence uniquement. N’utilisez pas ce code dans des applications ou des environnements de production.