管理 OAuth 应用

本指南介绍如何管理基于 OAuth 的应用与 Google Cloud 集成。

概括来讲,如需集成基于 OAuth 的应用,您需要执行以下操作:

  1. 创建 OAuth 客户端
  2. 创建 OAuth 客户端凭据
  3. 在 OAuth 客户端凭据中,获取客户端密钥。如需了解与存储和访问客户端密钥相关的风险以及有助于缓解这些风险的策略,请参阅 OAuth 客户端和凭据安全风险及缓解措施

完成这些步骤后,基于 OAuth 的应用便可以访问 Google Cloud 产品和数据。

准备工作

  1. 您必须设置一个 Google Cloud 组织。

  2. Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

  3. 您必须在要注册 OAuth 应用的组织中设置员工身份池和提供方。了解如何为 Microsoft Entra IDOkta其他 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 客户端的 ID
  • PROJECT_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 应用的项目的 ID
  • APP_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 客户端 ID
  • PROJECT_ID:您注册 OAuth 应用的项目的 ID
  • REDIRECT_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 应用的项目的 ID
  • APP_OAUTH_CLIENT_ID:您要更新的 OAuth 客户端的 OAuth 客户端 ID
  • REDIRECT_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 客户端 ID
  • PROJECT_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 应用的项目的 ID
  • APP_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:表示此客户端凭据的 ID
  • APP_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 应用的项目的 ID
  • APP_OAUTH_CLIENT_ID:您可以通过描述已注册的 OAuth 客户端应用来获取的 OAuth 客户端 ID
  • APP_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 客户端 ID
  • PROJECT_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 应用的项目的 ID
  • APP_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 客户端的重定向 URI
  • APP_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 应用的项目的 ID
  • APP_OAUTH_CLIENT_CREDENTIAL_ID:OAuth 客户端的重定向 URI
  • APP_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 应用的项目的 ID
  • APP_OAUTH_CLIENT_CREDENTIAL_ID:OAuth 客户端的重定向 URI
  • APP_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 应用的项目的 ID
  • APP_OAUTH_CLIENT_ID:OAuth 客户端 ID
  • APP_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 应用的项目的 ID
  • APP_OAUTH_CLIENT_ID:OAuth 客户端 ID
  • APP_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 客户端 ID
  • PROJECT_ID:您注册 OAuth 应用的项目的 ID
  • APP_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 应用的项目的 ID
  • APP_OAUTH_CLIENT_ID:客户端凭据 ID
  • APP_OAUTH_CLIENT_CREDENTIAL_ID:OAuth 客户端 ID

后续步骤