Jetons d’actualisation à usage unique pour les intégrations de sécurité OAuth de Snowflake¶
Cette rubrique décrit comment activer les jetons d’actualisation à usage unique pour les intégrations de sécurité OAuth de Snowflake.
Les jetons d’actualisation à usage unique sont une fonctionnalité que vous pouvez activer pour empêcher que des jetons d’actualisation volés ne soient réutilisés dans votre compte Snowflake. Lorsque vous activez les jetons d’actualisation à usage unique, les modifications suivantes sont apportées au comportement du flux d’accord des jetons d’actualisation :
Vous ne pouvez utiliser un jeton d’actualisation qu’une seule fois au cours des 90 jours de validité du jeton d’actualisation.
Une fois que vous avez utilisé un jeton d’actualisation, ce jeton d’actualisation devient non valide.
Le flux d’accord des jetons d’actualisation renvoie un nouveau jeton d’actualisation et un nouveau jeton d’accès, au lieu d’un nouveau jeton d’accès uniquement.
Une fois que vous avez obtenu un nouveau jeton d’actualisation, tous les jetons d’actualisation et jetons d’accès précédents deviennent non valides.
Avantages des jetons d’actualisation à usage unique¶
Les jetons d’actualisation à usage unique offrent les avantages suivants en termes de sécurité :
Réduction de la durée de vie effective des jetons : Lorsqu’une application légitime utilise un jeton d’actualisation, toute copie volée de ce jeton devient invalide. Ce comportement d’usage unique rend plus difficile la distribution de jetons volés et leur utilisation dans le cadre d’attaques programmées.
Par exemple, si votre application utilise le flux d’accord des jetons d’actualisation une fois toutes les 10 minutes, un acteur malveillant qui vole un jeton d’actualisation ne peut utiliser ce jeton volé que dans les 10 minutes, ou avant que l’application n’obtienne un nouveau jeton d’actualisation, même si le jeton est valide pendant 90 jours.
Détection d’intrusions : Vous ne pouvez pas réutiliser un jeton d’actualisation. Lorsqu’un jeton d’actualisation est réutilisé, tous les jetons d’actualisation et jetons d’accès précédents deviennent non valides.
Par exemple, si un acteur malveillant vole un jeton d’actualisation à usage unique et tente de réutiliser ce jeton, la tentative de réutilisation du jeton d’actualisation à usage unique invalide tous les jetons d’actualisation et jetons d’accès précédents, ce qui expose l’utilisation malveillante d’un jeton d’actualisation.
Activation des jetons d’actualisation à usage unique¶
Vous pouvez activer la rotation des jetons d’actualisation lorsque vous échangez un code d’autorisation contre un jeton d’accès et un jeton d’actualisation à l’aide d’un flux d’accord de codes d’autorisation.
Vous pouvez activer des jetons d’actualisation à usage unique en utilisant l’une des méthodes suivantes :
Utiliser un paramètre de requête dans le corps d’une requête HTTP
Définir une propriété dans une intégration de sécurité OAuth de Snowflake
Utiliser un paramètre de requête dans le corps d’une requête HTTP¶
Une application cliente peut définir le paramètre de requête enable_single_use_refresh_tokens
sur TRUE
dans le corps d’une requête HTTP POST adressée au point de terminaison de la requête de jetons pour OAuth de Snowflake pendant le flux d’accord de codes d’autorisation.
Une fois qu’une application cliente a défini le paramètre de requête enable_single_use_refresh_tokens
sur TRUE
pendant le flux d’accord de codes d’autorisation, tous les futurs flux d’accord de jetons d’actualisation renvoient un nouveau jeton d’actualisation et un nouveau jeton d’accès et invalident tous les jetons d’accès et jetons d’actualisation précédents.
Par exemple, vous pouvez lancer la requête HTTP POST suivante pour créer un flux d’accord de codes d’autorisation et définir le paramètre de requête enable_single_use_refresh_tokens
sur TRUE
pour obtenir votre premier jeton d’accès et votre premier jeton d’actualisation :
POST /oauth/token-request HTTP/1.1
Host: <my_subdomain>.snowflakecomputing.com
Authorization: Basic <client_id:client_secret>
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ12345&redirect_uri=http://127.0.0.1:8080&enable_single_use_refresh_tokens=true
{
"access_token": "<your_new_access_token>",
"expires_in": 600,
"refresh_token": "<your_new_refresh_token>",
"token_type": "Bearer",
"username": "<user1>",
}
Vous pouvez ensuite lancer la requête HTTP POST suivante pour créer un flux d’accord de jetons d’actualisation, en utilisant votre ancien jeton d’actualisation, pour obtenir un nouveau jeton d’accès et un nouveau jeton d’actualisation :
POST /oauth/token-request HTTP/1.1
Host: <my_subdomain>.snowflakecomputing.com
Authorization: Basic <client_id:client_secret>
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=<your_old_refresh_token>
{
"access_token": "<your_new_access_token>",
"expires_in": 600,
"refresh_token": "<your_new_refresh_token>",
"token_type": "Bearer",
}
Définir une propriété dans une intégration de sécurité OAuth de Snowflake¶
Si une application cliente met à jour son jeton d’actualisation en cache après chaque flux d’accord de jetons d’actualisation, vous pouvez activer les jetons d’actualisation à usage unique pour une intégration de sécurité OAuth de Snowflake en définissant la propriété OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED
sur TRUE
.
Après avoir activé les jetons d’actualisation à usage unique pour une intégration de sécurité OAuth de Snowflake, tous les flux d’accord de codes d’autorisation et les flux d’accord de jetons d’actualisation qui utilisent l’client_id
de l’intégration de sécurité émettent des jetons d’actualisation à usage unique, que l’application cliente spécifie ou non le paramètre de requête enable_single_use_refresh_tokens
pendant un flux d’accord de codes d’autorisation.
Par exemple, vous pouvez utiliser ALTER SECURITY INTEGRATION pour activer les jetons d’actualisation à usage unique pour une intégration de sécurité OAuth de Snowflake :
ALTER SECURITY INTEGRATION my_integration
SET OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED = TRUE;