Snowflake OAuth 概述

Snowflake OAuth 使用 Snowflake 内置的 OAuth 服务提供基于 OAuth 的身份验证。

本主题介绍 Snowflake OAuth,以及如何使用 Snowflake 作为 OAuth 资源和授权服务器,实现 Snowflake 数据的安全访问。

Snowflake OAuth 使用 Snowflake 内置的 OAuth 服务来支持以下应用程序:

Snowflake OAuth 授权流

OAuth 授权流如下:

Snowflake OAuth 工作流程
  1. 在客户端中,用户尝试使用 OAuth 连接到 Snowflake。

    应用程序向 Snowflake 授权服务器发送一条授权请求,该服务器显示一个授权屏幕,要求用户给与访问授权。

  2. 用户提交 Snowflake 登录名和密码,系统随即显示同意屏幕,要求用户允许客户端在用户会话中使用特定角色(例如 SYSADMIN 或 CUSTOM_ROLE1)访问 Snowflake。

    用户提交同意,以允许在会话中使用特定角色。

    Snowflake 授权服务器将授权代码发回到客户端。

  3. 客户端将授权代码发回到 Snowflake 授权服务器,以请求访问令牌以及可选的刷新令牌,允许客户端获取新的访问令牌。

    Snowflake 授权服务器接收授权代码,并为客户端提供特定于 Snowflake 资源服务器中用户资源的访问令牌。根据授权请求中的设置,授权服务器颁发刷新令牌,以获取绑定到特定资源的新访问令牌。

  4. 客户端将访问令牌发到 Snowflake 资源服务器。

    资源服务器在识别到有效的访问令牌后,即创建具有授权角色的用户会话。现在,客户端即可访问由访问令牌指定角色限制的 Snowflake 资源。

    默认情况下,Snowflake 会阻止 ACCOUNTADMIN、ORGADMIN 和 SECURITYADMIN 角色进行身份验证。要允许这些特权角色进行身份验证,请使用 ALTER ACCOUNT 命令,将 OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST 账户参数设为 FALSE

访问令牌的有效时长很短;通常为 10 分钟。在访问令牌到期时,客户端可以发送刷新令牌,以获取新访问令牌。只要当前访问令牌过期,就会向 Snowflake 授权服务器发送刷新令牌,以请求新的访问令牌(第 3-6 步)。如果为阻止发送刷新令牌配置了集成,用户必须重复上述步骤,以重新授权客户端。

合作伙伴应用程序

要配置支持,请参阅 为合作伙伴应用程序配置 Snowflake OAuth

要了解如何在不穿过公开互联网的情况下使用 OAuth,请参阅 合作伙伴应用程序

自定义客户端

Snowflake 支持由组织配置的自定义客户端。要配置支持,请参阅 为自定义客户端配置 Snowflake OAuth

网络策略

您只能将专用网络策略与 Snowflake OAuth ` 集成。 :doc: 外部 OAuth </user-guide/oauth-ext-overview>` 安全集成不支持设置单独的网络策略,但您仍可以使用适用于整个 Snowflake 账户的常规网络策略。

Snowflake OAuth 安全集成具有一个 network_policy 参数,这让 Snowflake OAuth 集成可对用户进行身份验证和授权,不需要添加这些 IP 地址,即可实现正常用户访问。

通过设置特定于 Snowflake OAuth 集成的网络策略,即可将 Snowflake OAuth 网络策略与可能适用于 Snowflake 账户的其他网络策略区分开来。因此,Snowflake OAuth 网络策略支持按预期对用户进行身份验证和授权。

应用于 Snowflake OAuth 集成的网络策略会替换应用于整个 Snowflake 账户的网络策略,但会被分配给用户的网络策略替换。

重要

如果按用户或账户设置了网络策略,并且使用了在另外一个位置运行的服务(例如 Microsoft Power BI Service),您将无法连接到 Snowflake。

创建 Snowflake OAuth 安全集成后,使用此命令设置 OAuth 网络策略:

ALTER SECURITY INTEGRATION <oauth_integration> SET NETWORK_POLICY = <oauth_network_policy>;
Copy

要取消设置 Snowflake OAuth 网络策略,请使用此命令:

ALTER SECURITY INTEGRATION <oauth_integration> UNSET <oauth_network_policy>;
Copy

其中:

<oauth_integration>

指定 Snowflake OAuth 安全集成的名称。

<oauth_network_policy>

在 Snowflake 中指定 Snowflake OAuth 网络策略。

有关更多信息,请参阅 使用网络策略控制网络流量ALTER SECURITY INTEGRATION

错误代码

有关与 Snowflake OAuth 相关的错误代码的说明,请参阅下表:

错误代码

错误

描述

390302

OAUTH_CONSENT_INVALID

在生成或验证给定用户的同意时出现问题。

390303

OAUTH_ACCESS_TOKEN_INVALID

尝试创建 Snowflake 会话时所用的访问令牌已过期或无效。

390304

OAUTH_AUTHORIZE_INVALID_RESPONSE_TYPE

以参数形式提供给授权端点的 response_type 无效(很可能是 code)。

390305

OAUTH_AUTHORIZE_INVALID_STATE_LENGTH

以参数形式提供给授权端点的状态参数长度超过 2048 个字符。

390306

OAUTH_AUTHORIZE_INVALID_CLIENT_ID

与所提供的客户端 ID 关联的集成不存在。

390307

OAUTH_AUTHORIZE_INVALID_REDIRECT_URI

以参数形式提供给授权端点的 redirect_uri 与所提供的 client_id 关联的集成的 redirect_uri 不匹配,或者 redirect_uri 格式不正确。

390308

OAUTH_AUTHORIZE_INVALID_SCOPE

请求的作用域并非有效作用域,或者请求的作用域无法完全授予用户。

390309

OAUTH_USERNAMES_MISMATCH

您尝试验证的用户不同于绑定到访问令牌的用户。

390311

OAUTH_AUTHORIZE_INVALID_CODE_CHALLENGE_PARAMS

代码质询或代码质询方法缺失、无效或不受支持。

此外,以下错误源自 RFC,并在令牌请求或交换失败期间生成的 JSON blob 中返回:

错误

描述

invalid_client

存在与客户端身份验证相关的故障,例如客户端未知、客户端密钥不匹配等。

invalid_grant

提供的授权授予或刷新令牌无效、已过期、已撤销、与授权请求中所用的重定向 URI 不匹配,或者已颁发给其他客户端。

unsupported_grant_type

提供了 Snowflake 目前不支持的授权类型(目前仅支持“refresh_token”和“authorization_code”这两种授权类型)。

invalid_request

请求格式不正确或无法处理。

语言: 中文