以编程方式为 IAP 创建 OAuth 客户端

本页介绍如何以编程方式创建用于 IAP 的 OAuth 客户端,使您能够以编程方式端到端为内部应用设置 IAP。

已知限制

以编程方式创建的 OAuth 客户端有一些已知限制:

  • 由 API 创建的 OAuth 客户端只能使用 API 进行修改。如果使用 API 创建 OAuth 客户端,则无法通过 Cloud Console 对其进行修改。
  • 使用 API 时,每个项目仅允许 500 个 OAuth 客户端。
  • API 创建的 OAuth 同意屏幕品牌有特定限制。如需了解详情,请参阅以下部分

了解品牌和品牌状态

包含用户品牌信息的 OAuth 同意屏幕称为品牌。品牌仅限内部用户或公共用户使用。内部品牌可以让与该项目属于同一 Google Workspace 组织的人员可以访问 OAuth 流程。公开品牌可以让互联网上的任何用户都能看到 OAuth 流程。

可以通过 API 手动或以编程方式创建品牌。API 创建的品牌会自动使用不同的设置进行配置:

  • 它们设置为内部,并且必须手动设置为公开(如果需要)
  • 它们设置为“未审核”状态,必须触发品牌审核

如需手动将内部品牌设置为公开,请执行以下操作:

  1. 打开 OAuth 同意屏幕
  2. 从下拉菜单中选择所需的项目。
  3. OAuth 权限请求页面,请注意,用户类型会自动设置为内部。如需将其设置为公开,请点击修改应用。系统会显示更多配置选项。
  4. 应用类型下,点击公开

如需对 API 创建的未经审核的品牌触发品牌审核,请执行以下操作:

  1. 打开 OAuth 同意屏幕
  2. 从下拉菜单中选择所需的项目。
  3. OAuth 权限请求页面,输入所有必需的信息,然后点击提交以进行验证

验证流程可能需要几周时间。随着此流程的推进,您会收到电子邮件更新。详细了解验证。在执行验证流程期间,您仍然可以在 Google Workspace 组织内使用该应用。详细了解您的应用在经过验证之前的行为。

准备工作

在创建客户端之前,首先请确保已向调用方授予以下权限:

  • clientauthconfig.brands.list
  • clientauthconfig.brands.create
  • clientauthconfig.brands.get
  • clientauthconfig.clients.create
  • clientauthconfig.clients.listWithSecrets
  • clientauthconfig.clients.getWithSecret
  • clientauthconfig.clients.delete
  • clientauthconfig.clients.update

这些权限包含在 Editor (roles/editor) 和 Owner (roles/owner) 基本角色中,但是我们建议您创建一个包含这些权限的自定义角色并将其授予调用方。

为 IAP 设置 OAuth

以下步骤介绍了如何配置同意屏幕,以及如何为 IAP 创建客户端并对其进行身份验证。

  1. 使用 list 命令检查您是否已有品牌。每个项目只能有一个品牌。

    gcloud alpha iap oauth-brands list
    

    以下是 gcloud 响应示例(如果存在品牌):

    name: projects/[PROJECT_NUMBER]/brands/[BRAND_ID]
    applicationTitle: [APPLICATION_TITLE]
    supportEmail: [SUPPORT_EMAIL]
    orgInternalOnly: true
    
  2. 如果不存在品牌,请使用 create 命令:

    gcloud alpha iap oauth-brands create --application_title=APPLICATION_TITLE --support_email=SUPPORT_EMAIL
    

    调用 API 时上述字段为必填字段:

    • supportEmail:OAuth 同意屏幕上显示的支持电子邮件。该电子邮件地址可以是用户的地址,也可以是 Google 群组别名。虽然服务帐号也有一个电子邮件地址,但它们不是实际有效的电子邮件地址,在创建品牌时不能使用。但是,服务帐号可以是 Google 群组的所有者。创建新的 Google 群组或配置现有群组,然后将所需的服务帐号设置为该群组的所有者。

    • applicationTitle:OAuth 同意屏幕上显示的应用名称。

    响应包含以下字段:

    name: projects/[PROJECT_NUMBER]/brands/[BRAND_ID]
    applicationTitle: [APPLICATION_TITLE]
    supportEmail: [SUPPORT_EMAIL]
    orgInternalOnly: true
    

创建 IAP OAuth 客户端

  1. 使用 create 命令可以创建客户端。使用上一步中的品牌 name

    gcloud alpha iap oauth-clients create projects/PROJECT_ID/brands/BRAND-ID --display_name=NAME
    

    响应包含以下字段:

    name: projects/[PROJECT_NUMBER]/brands/[BRAND_NAME]/identityAwareProxyClients/[CLIENT_ID]
    secret: [CLIENT_SECRET]
    displayName: [NAME]
    
  2. 使用客户端 ID(在上例中为 client_id)和 secret 启用 IAP。请参阅以下主题,详细了解如何使用您刚刚创建的凭据启用 IAP:

身份验证

为应用配置 IAP 后,所有请求都需要进行身份验证。以下步骤介绍了如何以编程方式访问受 IAP 保护的应用。

最终用户身份验证

完成上述步骤后,请参阅本主题详细了解如何使用 OAuth 2.0 进行身份验证。确保您请求刷新令牌以允许自动化。在 OAuth 流程中需要手动同意,但是刷新令牌可用于以编程方式获取新的访问令牌。

服务帐号和 gcloud

如需使用服务帐号和 gcloud 进行身份验证,请执行以下操作:

  1. 创建服务帐号,并向其授予所需权限
  2. 创建服务帐号密钥,然后将其下载到所需的路径。
  3. 执行以下 gcloud 命令,并指定服务帐号密钥的路径:

    gcloud auth activate-service-account [ACCOUNT-NAME]
        --key-file=/path/to/service-key.json --project=[PROJECT_ID]
    
  4. 使用 gcloud auth print-access-token 发出 API 请求:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"
        https://iap.googleapis.com/v1/projects/[PROJECT_ID_OR_NUMBER]/brands