Snowflake OAuth 安全集成的一次性刷新令牌

本主题介绍如何为 Snowflake OAuth 安全集成 启用一次性刷新令牌。

一次性刷新令牌是一项可启用的功能,可防止被盗的刷新令牌在 Snowflake 账户中重复使用。当您启用一次性刷新令牌时,刷新令牌授予流程的行为会发生以下变化:

  • 在刷新令牌有效的 90 天内,您只能使用一次刷新令牌。

  • 使用刷新令牌后,刷新令牌将失效。

  • 刷新令牌授予流程返回新的刷新令牌和新的访问令牌,而不仅仅是新的访问令牌。

  • 获得新的刷新令牌后,所有以前的刷新令牌和访问令牌都将失效。

一次性刷新令牌的优势

一次性刷新令牌具有以下安全优势:

  • 缩短了令牌的有效生命周期:当合法应用程序使用刷新令牌时,任何被盗的刷新令牌副本都将失效。这种一次性行为使得分发被盗令牌和在定时攻击中使用被盗令牌变得更加困难。

    例如,如果您的应用程序每 10 分钟使用一次刷新令牌授予流程,则窃取刷新令牌的恶意行为者只能在 10 分钟内或应用程序获得新刷新令牌之前使用被盗令牌,即使该令牌的有效期为 90 天。

  • 入侵检测:您不能重复使用刷新令牌。重复使用刷新令牌时,所有先前的刷新令牌和访问令牌都将失效。

    例如,如果恶意行为者窃取了一次性刷新令牌并尝试重复使用该令牌,则尝试重复使用一次性刷新令牌会使之前的所有刷新令牌和访问令牌失效,从而暴露出刷新令牌的恶意使用行为。

启用一次性刷新令牌

当您使用授权码授予流程将授权码交换为访问令牌和刷新令牌时,可以启用刷新令牌轮换。

您可以使用以下任何一种方法启用一次性刷新令牌:

在 HTTP 请求正文中使用请求参数

在授权码授予流程中,客户端应用程序可以在向 Snowflake OAuth 的令牌请求端点发出的 HTTP POST 请求正文中将 enable_single_use_refresh_tokens 请求参数设置为 TRUE

在授权码授予流程中,客户端应用程序将 enable_single_use_refresh_tokens 请求参数设置为 TRUE 后,所有未来的刷新令牌授予流程都会返回新的刷新令牌和新的访问令牌,并使以前的所有访问令牌和刷新令牌失效。

例如,您可以发出以下 HTTP POST 请求来执行 授权码授予流程,并将 enable_single_use_refresh_tokens 请求参数设置为 TRUE,以获取您的第一个访问令牌和刷新令牌:

POST /oauth/token-request HTTP/1.1
Host: <my_subdomain>.snowflakecomputing.cn
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
Copy

然后,您可以提出以下 HTTP POST 请求,使用旧的刷新令牌执行 刷新令牌授予流程,以获取新的访问令牌和新的刷新令牌:

POST /oauth/token-request HTTP/1.1
Host: <my_subdomain>.snowflakecomputing.cn
Authorization: Basic <client_id:client_secret>
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=<your_old_refresh_token>
Copy

在 Snowflake OAuth 安全集成中设置属性

如果客户端应用程序在每次刷新令牌授予流程后更新其缓存的刷新令牌,则可以通过将 OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED 属性设置为 TRUE,为 Snowflake OAuth 安全集成 启用一次性刷新令牌。

为 Snowflake OAuth 安全集成启用一次性刷新令牌后,无论客户端应用程序在授权码授予流程中是否指定 enable_single_use_refresh_tokens 请求参数,所有使用安全集成的 client_id 授权码授予流程和刷新令牌授予流程都会颁发一次性刷新令牌。

例如,您可以使用 ALTER SECURITY INTEGRATION 为 Snowflake OAuth 安全集成启用一次性刷新令牌:

ALTER SECURITY INTEGRATION my_integration
  SET OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED = TRUE;
Copy
语言: 中文