本指南介绍如何管理基于 OAuth 的应用与 Google Cloud 集成。
概括来讲,如需集成基于 OAuth 的应用,您需要执行以下操作:
- 创建 OAuth 客户端。
- 创建 OAuth 客户端凭据。
- 在 OAuth 客户端凭据中,获取客户端密钥。如需了解与存储和访问客户端密钥相关的风险以及有助于缓解这些风险的策略,请参阅 OAuth 客户端和凭据安全风险及缓解措施。
完成这些步骤后,基于 OAuth 的应用便可以访问 Google Cloud 产品和数据。
准备工作
您必须设置一个 Google Cloud 组织。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
您必须在要注册 OAuth 应用的组织中设置员工身份池和提供方。了解如何为 Microsoft Entra ID、Okta 和其他 OIDC 和 SAML 2.0 提供方设置员工身份联合。
所需的角色
如需获得为贵组织注册 OAuth 应用所需的权限,请让您的管理员为您授予项目的 IAM OAuth Client Admin (roles/iam.oauthClientAdmin
) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
管理 OAuth 客户端
本部分介绍了如何管理 OAuth 客户端。
创建 OAuth 客户端
如需创建 OAuth 客户端,请执行以下操作:
gcloud
gcloud iam oauth-clients create APP_OAUTH_CLIENT_ID \
--project=PROJECT_ID \
--location=global \
--client-type="CONFIDENTIAL_CLIENT" \
--display-name="My OAuth application" \
--description="An application registration for MyApp" \
--allowed-scopes="https://www.googleapis.com/auth/cloud-platform" \
--allowed-redirect-uris="REDIRECT_URI" \
--allowed-grant-types="authorization_code_grant"
替换以下内容:
APP_OAUTH_CLIENT_ID
:用于表示此 OAuth 客户端的客户端 ID。PROJECT_ID
:您创建员工身份池和提供方的项目的 ID。项目必须在创建员工池和提供方所在的组织中创建。REDIRECT_URI
:OAuth 应用的重定向 URI,例如https://myapp.com/signin-callback
。
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
-d "{ \
'allowedGrantTypes': ['AUTHORIZATION_CODE_GRANT'], \
'allowedRedirectUris': ['REDIRECT_URI'], \
'allowedScopes': ['https://www.googleapis.com/auth/cloud-platform'], \
'clientType': 'CONFIDENTIAL_CLIENT', \
'description': 'My OAuth client description', \
'disabled': false, \
'displayName': 'My OAuth client'}" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients\?oauthClientId\=APP_OAUTH_CLIENT_ID
替换以下内容:
PROJECT_ID
:您创建员工身份池和提供方的项目的 ID。项目必须在创建员工池和提供方所在的组织中创建。REDIRECT_URI
:OAuth 应用的重定向 URI,例如https://myapp.com/signin-callback
。APP_OAUTH_CLIENT_ID
:用于表示此 OAuth 客户端的客户端 ID。
注册应用后,您需要创建 OAuth 客户端凭据并获取 OAuth 应用用于访问 Google Cloud 的 Secret。
列出 OAuth 客户端
如需列出已注册的 OAuth 客户端,请运行以下命令:
gcloud
gcloud iam oauth-clients list \
--project=PROJECT_ID \
--location=global
REST
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients
将 PROJECT_ID
替换为您的 OAuth 应用已注册的项目的 ID。
描述 OAuth 客户端
如需描述 OAuth 客户端,请运行以下命令:
gcloud
gcloud iam oauth-clients describe APP_OAUTH_CLIENT_ID \
--project PROJECT_ID \
--location global
替换以下内容:
APP_OAUTH_CLIENT_ID
:您要描述的 OAuth 客户端的 IDPROJECT_ID
:您注册 OAuth 应用的项目的 ID
REST
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:您要描述的 OAuth 客户端的 ID
更新 OAuth 客户端
如需更新 OAuth 客户端,请运行以下命令。
gcloud
gcloud iam oauth-clients update APP_OAUTH_CLIENT_ID \
--project=PROJECT_ID \
--location=global \
--allowed-redirect-uris="REDIRECT_URI"
替换以下内容:
APP_OAUTH_CLIENT_ID
:您要更新的 OAuth 客户端的 OAuth 客户端 IDPROJECT_ID
:您注册 OAuth 应用的项目的 IDREDIRECT_URI
:OAuth 应用的重定向 URI
如需更新其他字段,请使用 gcloud iam oauth-clients update
中列出的标记。
REST
curl -d'{"allowedRedirectUris":"REDIRECT_URI"}' \
-H "Content-Type: application/json" -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID?update_mask=allowed_redirect_uris
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:您要更新的 OAuth 客户端的 OAuth 客户端 IDREDIRECT_URI
:OAuth 客户端的重定向 URI
如要更新其他字段,请将 update_mask
设置为 gcloud iam oauth-clients update
中列出的字段名称。
删除 OAuth 客户端
如需删除 OAuth 客户端,请运行以下命令:
gcloud
gcloud iam oauth-clients delete APP_OAUTH_CLIENT_ID \
--project PROJECT_ID \
--location global
替换以下内容:
APP_OAUTH_CLIENT_ID
:要删除的 OAuth 客户端 IDPROJECT_ID
:您注册 OAuth 应用的项目的 ID
REST
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:要删除的 OAuth 客户端 ID
管理 OAuth 客户端凭据
本部分介绍了如何管理 OAuth 客户端的 OAuth 客户端凭据。
创建 OAuth 客户端凭据
如需创建 OAuth 客户端凭据,请运行以下命令:
gcloud
gcloud iam oauth-clients credentials create APP_OAUTH_CLIENT_CREDENTIAL_ID \
--oauth-client=APP_OAUTH_CLIENT_ID \
--display-name='My OAuth client credential' \
--location='global'
替换以下内容:
APP_OAUTH_CLIENT_CREDENTIAL_ID
:表示此客户端凭据的 IDAPP_OAUTH_CLIENT_ID
:您可以通过描述已注册的 OAuth 客户端应用来获取的 OAuth 客户端 ID
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
-d "{'disabled': false, 'displayName': 'My OAuth client credential'}" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials\?oauthClientCredentialId=APP_OAUTH_CLIENT_CREDENTIAL_ID
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:您可以通过描述已注册的 OAuth 客户端应用来获取的 OAuth 客户端 IDAPP_OAUTH_CLIENT_CREDENTIAL_ID
:表示此客户端凭据的 ID
列出 OAuth 客户端凭据
如需列出 OAuth 客户端凭据,请运行以下命令:
gcloud
gcloud iam oauth-clients credentials list \
--oauth-client=APP_OAUTH_CLIENT_ID \
--project=PROJECT_ID \
--location=global
替换以下内容:
APP_OAUTH_CLIENT_ID
:要列出凭据的 OAuth 客户端 IDPROJECT_ID
:您注册 OAuth 应用的项目的 ID
REST
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/$PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:要列出凭据的 OAuth 客户端 ID
描述 OAuth 客户端凭据
如需描述 OAuth 客户端凭据,请运行以下命令。您可以通过检查输出内容来获取客户端密钥。
gcloud
gcloud iam oauth-clients credentials describe APP_OAUTH_CLIENT_CREDENTIAL_ID \
--oauth-client=APP_OAUTH_CLIENT_ID \
--location='global'
替换以下内容:
APP_OAUTH_CLIENT_CREDENTIAL_ID
:OAuth 客户端的重定向 URIAPP_OAUTH_CLIENT_ID
:您可以通过描述客户端应用注册来获取的 OAuth 客户端 ID
REST
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials/APP_OAUTH_CLIENT_CREDENTIAL_ID
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_CREDENTIAL_ID
:OAuth 客户端的重定向 URIAPP_OAUTH_CLIENT_ID
:您可以通过描述客户端应用注册来获取的 OAuth 客户端 ID
在输出中,clientSecret
是客户端密钥。这是 OAuth 应用用于访问 Google Cloud 的 Secret。
更新 OAuth 客户端凭据
如需更新 OAuth 客户端凭据,请运行以下命令:
gcloud
gcloud iam oauth-clients credentials update APP_OAUTH_CLIENT_CREDENTIAL_ID \
--client-id=APP_OAUTH_CLIENT_ID \
--display-name="My new credential name" \
--location=global
REST
curl -d'{"displayName":"My new credential name"}' -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://staging-iam.sandbox.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials/APP_OAUTH_CLIENT_CREDENTIAL_ID?update_mask=display_name
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_CREDENTIAL_ID
:OAuth 客户端的重定向 URIAPP_OAUTH_CLIENT_ID
:您可以通过描述客户端应用注册来获取的 OAuth 客户端 ID
停用 OAuth 客户端凭据
您必须先停用 OAuth 客户端凭据,然后才能将其删除。如需停用 OAuth 客户端凭据,请运行以下命令:
gcloud
gcloud iam oauth-clients credentials update APP_OAUTH_CLIENT_CREDENTIAL_ID \
--oauth-client=APP_OAUTH_CLIENT_ID \
--disabled \
--project=PROJECT_ID \
--location=global
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:OAuth 客户端 IDAPP_OAUTH_CLIENT_CREDENTIAL_ID
:要停用的客户端凭据 ID
REST
curl -d'{"disabled":"true"}' \
-H "Content-Type: application/json" -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials/APP_OAUTH_CLIENT_CREDENTIAL_ID?update_mask=disabled
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:OAuth 客户端 IDAPP_OAUTH_CLIENT_CREDENTIAL_ID
:要停用的客户端凭据 ID
删除 OAuth 客户端凭据
如需删除 OAuth 客户端凭据,请运行以下命令:
gcloud
gcloud iam oauth-clients credentials delete APP_OAUTH_CLIENT_CREDENTIAL_ID \
--project=PROJECT_ID \
--oauth-client=APP_OAUTH_CLIENT_ID \
--location=global
替换以下内容:
APP_OAUTH_CLIENT_CREDENTIAL_ID
:OAuth 客户端 IDPROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:客户端凭据 ID
REST
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials/APP_OAUTH_CLIENT_CREDENTIAL_ID
替换以下内容:
PROJECT_ID
:您注册 OAuth 应用的项目的 IDAPP_OAUTH_CLIENT_ID
:客户端凭据 IDAPP_OAUTH_CLIENT_CREDENTIAL_ID
:OAuth 客户端 ID