您可以使用 Cloud OAuth API (cloudoauth.googleapis.com) 将授权代码或刷新令牌交换为短期有效的 Google CloudOAuth 2.0 访问令牌和 OpenID Connect (OIDC) ID 令牌。在员工身份联合集成中,您的应用随后可以使用组织的公钥验证返回的 ID 令牌,并使用访问令牌代表联合用户调用Google Cloud API。
准备工作
- 配置员工身份池和提供方。如需了解详情,请参阅配置员工身份联合。
- 注册 OAuth 客户端并创建客户端凭证。如需了解详情,请参阅管理 OAuth 应用。
-
启用 Cloud OAuth API(如果尚未启用)。
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。
身份验证方法
如需使用 Cloud OAuth API 对 OAuth 客户端进行身份验证,请通过以下方式之一传递客户端 ID 和客户端密钥:
HTTP 基本身份验证(推荐):在
Authorization标头中传递 base64 编码的客户端 ID 和客户端密钥:-H "Authorization: Basic $(echo -n 'CLIENT_ID:CLIENT_SECRET' | base64)"
请求正文参数:在请求正文中传递
client_id和client_secret参数。
将授权代码转换为令牌
联合用户在Google Cloud的统一授权端点 (https://auth.cloud.google/authorize) 使用其身份提供方 (IdP) 登录后,授权端点会将用户重定向到应用的重定向 URI,并附带授权代码。如需使用此授权代码换取访问令牌、刷新令牌和 OIDC ID 令牌,请向组织范围(单租户)端点发送 HTTP POST 请求:
HTTP 基本身份验证(推荐):
curl -X POST https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/token \ -H "Authorization: Basic BASE64_ENCODED_CREDENTIALS" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "grant_type=authorization_code" \ --data-urlencode "code=AUTHORIZATION_CODE" \ --data-urlencode "redirect_uri=REDIRECT_URI"
请求正文参数:
curl -X POST https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/token \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "grant_type=authorization_code" \ --data-urlencode "code=AUTHORIZATION_CODE" \ --data-urlencode "redirect_uri=REDIRECT_URI" \ --data-urlencode "client_id=CLIENT_ID" \ --data-urlencode "client_secret=CLIENT_SECRET"
替换以下内容:
ORGANIZATION_ID:您的 Google Cloud组织 ID。BASE64_ENCODED_CREDENTIALS:CLIENT_ID:CLIENT_SECRET的 base64 编码字符串。AUTHORIZATION_CODE: Google Cloud的统一授权端点 (https://auth.cloud.google/authorize) 返回的授权代码。REDIRECT_URI:在 OAuth 客户端上配置的重定向 URI。CLIENT_ID:您注册的 OAuth 客户端 ID。CLIENT_SECRET:您的 OAuth 客户端密钥。
刷新访问令牌
当访问令牌过期时,请使用 refresh_token 授权类型从组织级(单租户)端点获取新的短期访问令牌:
curl -X POST https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/token \ -H "Authorization: Basic BASE64_ENCODED_CREDENTIALS" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "grant_type=refresh_token" \ --data-urlencode "refresh_token=REFRESH_TOKEN" \ --data-urlencode "redirect_uri=REDIRECT_URI"
替换以下内容:
ORGANIZATION_ID:您的 Google Cloud组织 ID。BASE64_ENCODED_CREDENTIALS:CLIENT_ID:CLIENT_SECRET的 base64 编码字符串。REFRESH_TOKEN:令牌端点之前返回的刷新令牌。REDIRECT_URI:在 OAuth 客户端上配置的重定向 URI。
令牌响应字段
令牌交换成功后,Cloud OAuth API 会返回一个 HTTP 200 OK 状态,其中包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
access_token |
string |
Cloud OAuth API 颁发的用于调用 Google Cloud API 的 OAuth 2.0 访问令牌。 |
refresh_token |
string |
当当前令牌过期时,用于获取新访问令牌的刷新令牌。 |
expires_in |
integer |
访问令牌的剩余生命周期(以秒为单位,通常为 3599)。
|
token_type |
string |
令牌类型(例如 Bearer)。 |
scope |
string |
与令牌关联的范围列表。 |
id_token |
string |
包含经过身份验证的身份声明的 OIDC ID 令牌。 |
如需了解 Cloud OAuth API 返回的错误响应,请参阅 Cloud OAuth API 令牌交换错误。
验证 OIDC ID 令牌
对于 Looker OIDC 集成,您可以使用组织的公共 JSON Web 密钥 (JWK) 验证 Cloud OAuth API 返回的 id_token 的加密签名。
通过以下任一方式检索组织的公开 JWK:
- 直接查询 JSON Web 密钥集 (JWKS) 端点:向
https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/.well-known/jwks.json发送 HTTPGET请求。 - 使用 OIDC 发现文档:向 OIDC 发现端点 (
https://auth.cloud.google/oidc/organizations/ORGANIZATION_ID/.well-known/openid-configuration) 发送 HTTPGET请求,以从jwks_uri字段中检索 JWKS 端点网址。
在两个端点网址中,将 ORGANIZATION_ID 替换为您的数字 Google Cloud 组织 ID。
后续步骤
- 使用 Cloud OAuth API 检索用户信息
- 使用 Cloud OAuth API 检索企业群组
- Cloud OAuth API 概览
- 管理员工身份联合的 OAuth 应用
- Cloud OAuth REST API 参考文档