Snowflake OAuth セキュリティ統合の1回使用の更新トークン¶
このトピックでは、:doc:` Snowflake OAuth セキュリティ統合 </user-guide/oauth-snowflake-overview>` の単一使用の更新トークンを有効にする方法について説明します。
1回限りのリフレッシュトークンは、盗難されたリフレッシュトークンがSnowflakeアカウントで再利用されるのを防ぐために有効にできる機能です。1回使用のリフレッシュトークンを有効にすると、リフレッシュトークン付与フローの動作に以下の変更が加えられます。
更新トークンの有効期間90日間の間に更新トークンを使用できるのは1回のみです。
更新トークンを使用すると、更新トークンは無効になります。
リフレッシュトークン付与フローは、新しいアクセストークンだけではなく、新しいリフレッシュトークンと新しいアクセストークンを返します。
新しい更新トークンを取得すると、以前の更新トークンとアクセストークンはすべて無効になります。
1回使用のリフレッシュトークンの利点¶
1回限りの更新トークンには、次のセキュリティ上の利点があります。
有効トークン期間の短縮:正規アプリケーションがリフレッシュトークンを使用すると、リフレッシュトークンの盗難されたコピーはすべて無効になります。この1回限りの動作により、盗難されたトークンの配布と、期限切れ攻撃での盗難トークンの使用がより困難になります。
たとえば、アプリケーションが10分ごとに 更新トークン付与フローを1回使用する場合、悪意のある攻撃者が更新トークンを盗んでも、そのトークンの有効期限が 90 日であっても、アプリケーションが新しいリフレッシュトークンを取得するまでの 10 分以内しか使用できません。
侵入検知:更新トークンは再利用できません。更新トークンが再利用されると、以前のすべての更新トークンとアクセストークンは無効になります。
たとえば、悪意のある攻撃者が1回限りの使用の更新トークンを盗み、それを再利用しようとすると、その試みによってすべての過去の更新トークンとアクセストークンが無効化され、更新トークンの不正使用が明らかになります。
1回使用のリフレッシュトークンの有効化¶
認証コード付与フローを使用して、アクセストークンとリフレッシュトークンの認証コードを交換すると、リフレッシュトークンのローテーションを有効にすることができます。
次のいずれかの方法を使用して、1回使用の更新トークンを有効にできます。
HTTP リクエストの本文でリクエストパラメーターを使用する¶
クライアントアプリケーションは認証コード付与フロー中の間に、 Snowflake OAuth</user-guide/oauth-snowflake-overview>`用のトークンリクエストエンドポイントへのHTTPPOST リクエストの本文で``enable_single_use_refresh_tokens` リクエストパラメーターを TRUE
に設定できます。
クライアントアプリケーションが認証コード付与フロー中に enable_single_use_refresh_tokens
リクエストパラメーター を``TRUE`` に設定した後、以降のすべての更新トークン付与フローが新しい更新トークンと新しいアクセストークンを返し、以前のすべてのアクセストークンと更新トークンを無効にします。
たとえば、以下の HTTPPOST リクエストを送信して**認証コードグラントフロー** を実行し、enable_single_use_refresh_tokens
へのリクエストパラメーターを TRUE
に設定することで、最初のアクセストークンと更新トークンを取得できます。
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>",
}
次を実行できます。 HTTPPOST 古い更新トークンを使用して、更新トークン付与フロー を実行し、新しいアクセストークンと新しい更新トークンを取得するようリクエストします。
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",
}
Snowflake OAuth セキュリティ統合でプロパティを設定する¶
クライアントアプリケーションが各更新トークン付与フローの後にキャッシュされた更新トークンを更新する場合は、Snowflake OAuth セキュリティ統合 に対して、 OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED
プロパティを TRUE
に設定することによって、単一使用の更新トークンを有効にできます。
Snowflake OAuth セキュリティ統合に対して、単一使用の更新トークンを有効にした後 、すべての認証コード付与フロー、および を使用する更新トークン付与フロー client_id
クライアントアプリケーションが認証コード付与フロー中の enable_single_use_refresh_tokens
リクエストパラメーターを指定するかどうかに関係なく、単一使用の更新トークンを発行します。
たとえば、SnowflakeOAuth セキュリティ統合に対して単一使用の更新トークンを有効にするには、ALTERSECURITYINTEGRATION を使用できます。
ALTER SECURITY INTEGRATION my_integration
SET OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED = TRUE;