如何从Google侧通过Python用OAuth连接Snowflake并获取oauth_access_token?
Google身份源场景下Snowflake OAuth访问令牌获取方案
首先需要先完成Google Cloud与Snowflake的OAuth集成前置配置,未完成配置前无法正常生成令牌。
前置配置确认
- 已在Google Cloud控制台创建OAuth 2.0客户端凭据,记录好客户端ID、客户端密钥
- 已在Snowflake侧创建对应OAuth安全集成,绑定Google的客户端信息、授权端点、令牌端点,且已给对应账号分配OAuth登录权限
交互场景令牌获取(需要用户手动授权)
- 构造Google OAuth授权链接,引导用户完成身份验证和授权,获取返回的授权码(code)
- 用授权码向Google令牌端点发起请求换取访问令牌,Python示例代码如下:
import requests # 替换为你自己的配置值 GOOGLE_TOKEN_ENDPOINT = "https://oauth2.googleapis.com/token" CLIENT_ID = "你的Google OAuth客户端ID" CLIENT_SECRET = "你的Google OAuth客户端密钥" REDIRECT_URI = "你配置的重定向URI" AUTH_CODE = "上一步获取的授权码" params = { "grant_type": "authorization_code", "code": AUTH_CODE, "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "redirect_uri": REDIRECT_URI } resp = requests.post(GOOGLE_TOKEN_ENDPOINT, data=params) oauth_access_token = resp.json()["access_token"]
- 拿到的
oauth_access_token即可直接填入你提供的Snowflake连接代码的对应参数位置
非交互服务账号场景令牌获取(无用户参与的后台程序)
如果是后台服务需要自动连接,不需要用户手动授权,可以使用Google服务账号生成JWT签名,直接向令牌端点换取访问令牌,无需授权码步骤:
- 先在Google Cloud控制台创建服务账号,下载JSON格式的密钥文件
- 使用Google官方认证库
google-auth直接生成对应令牌,示例代码如下:
from google.oauth2 import service_account # 替换为你的服务账号密钥文件路径和Snowflake对应的OAuth作用域 SCOPES = ["https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile"] SERVICE_ACCOUNT_FILE = "你的服务账号密钥.json" credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES ) credentials.refresh(None) oauth_access_token = credentials.token
注意事项
- 普通OAuth访问令牌默认有效期为1小时,Snowflake侧接受的令牌有效期最长为10分钟,超时后需要重新生成
- 若需要长期连接,可以同时获取刷新令牌,在令牌过期前用刷新令牌自动换取新的访问令牌,无需重新走授权流程
内容的提问来源于stack exchange,提问作者Siwawut Salikupt
相关产品推荐
相关产品推荐

