集成应用的前端

本页介绍如何将应用的前端 Cloud Marketplace 为您的客户提供流畅的使用体验 从您的 Cloud Marketplace 迁移到您的产品。

概括地说,您必须提供注册网址来处理创建用户账号事宜,然后在 Web 控制台中管理这些账号。您还必须提供 供用户登录的网址。(可选)您可以集成单点登录 (SSO)。

使用 Producer Portal 集成应用的前端

如需访问将应用的前端与 Cloud Marketplace,您可以使用 Producer Portal 的前端集成部分。

Producer Portal 的直接链接是:

https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID

要访问前端集成部分,请执行以下操作:

  1. 在产品列表中,点击您的产品的名称。

  2. 在您产品的概览页面上,转到技术集成部分,然后点击前端集成

添加您的注册网址

当用户从 Cloud Marketplace 购买您的产品时,您必须创建一个 为他们购买您的产品为此,您必须创建注册页面 设置和批准用户的。您可以将此页面设置为注册页面,供用户在其中注册系统中的账号,也可以设置为自动批准账号的页面。

创建注册页面后,将其添加到 Producer Portal 中:

  1. 在产品列表中,点击您的产品的名称。

  2. 在您产品的概览页面上,转到技术集成部分,然后点击前端集成

  3. 注册网址字段中输入注册页面的网址。

验证用户的注册信息

如果用户尚未在您的系统中创建账号,他们必须点击 YOUR_COMPANY_NAME 注册按钮位于 Cloud Marketplace。用户点击此按钮后,Google Cloud 会 HTTP POST向您的注册页面发送请求,其中包含一个 JSON 网络令牌 (JWT) x-gcp-marketplace-token 参数。JWT 包含用户的采购账号 ID(用于将该用户标识为 Google Cloud 用户)和经过混淆处理的 ID(表示其 Google 账号 ID)。您必须同时使用 采购账号 ID 和用于关联用户 Google 账号的经过混淆处理的 ID 您系统中的账号

验证 JWT 后,注册页面必须发送 发送给 Partner Procurement API 的账号审批请求,如 后端集成步骤

如需详细了解 JWT 载荷以及如何验证,请参阅 在下面验证 JWT

如果您不熟悉 JWT,请参阅 JWT 简介

添加您的登录网址

您必须为应用的登录页面指定网址。

如需在 Producer Portal 中输入应用登录页面的网址,请执行以下操作:

  1. 在产品列表中,点击您的产品的名称。

  2. 在您产品的概览页面上,前往技术集成部分,然后点击前端集成

  3. Login 网址(登录网址)字段中输入应用登录页面的网址。

(可选)为您的客户启用单点登录 (SSO)

如需在 Producer Portal 中启用单点登录,请执行以下操作:

  1. 在产品列表中,点击您的产品的名称。

    1. 在产品的概览页面上,前往技术 集成部分,然后点击前端集成

    2. 要启用单点登录吗?下,选择

请验证您客户的SSO 登录信息

当客户使用 SSO 登录您的应用时,Google Cloud 会向应用的登录页面发送 HTTP POST 请求,其中包含格式与用户首次注册应用时发送的 JWT 相同的 JSON Web 令牌 (JWT)

如需详细了解 JWT 载荷以及如何验证,请参阅 在下面验证 JWT

验证 JWT

某些流程(例如注册新客户或使用 单点登录,包括向您发送 HTTP POST 请求以及 您可能需要的 JSON 网络令牌 (JWT) 进行验证。

下表列出了:

  • 涉及通过 JWT 发送 HTTP 请求的事件。
  • 所涉及的 HTTP 请求的类型。
  • 您是否必须验证 JWT。
事件 HTTP 请求类型 需要进行 JWT 验证

注册新客户

POST

客户登录(不使用单点登录)

GET

客户登录(使用单点登录)

POST

JWT 载荷

JWT 有效负载格式如下:

标头

{
  "alg": "RS256",
  "kid": "KEY_ID"
}

其中:

  • alg 始终为 RS256
  • kid 表示用于保护 JWT 的密钥 ID。使用密钥 ID 从有效负载的 iss 属性中的 JSON 对象查找密钥。

载荷

{
  "iss": "https://www.googleapis.com/robot/v1/metadata/x509/cloud-commerce-partner@system.gserviceaccount.com",
  "iat": CURRENT_TIME,
  "exp": CURRENT_TIME + 5 minutes,
  "aud": "PARTNER_DOMAIN_NAME",
  "sub": "PROCUREMENT_ACCOUNT_ID",
  "google": {
    "roles": [GCP_ROLE],
    "user_identity": USER_ID
  }
}

其中:

  • sub 是用户的 Google 账号 ID。您必须使用此 ID 将用户的 Google 账号与用户在您系统中的账号相关联。
  • iss 标识 JWT 的发送者。iss 声明中的网址链接到 Google 的公钥。
  • exp 表示令牌到期时间,而且设置为令牌发送后的 5 分钟。
  • aud 是托管您产品的网域,例如 example.com
  • roles 是代表用户角色的字符串数组。它可以 您可以:

  • user_identity 是用户的经过混淆处理的 GAIA ID,可用于 启动 OpenID Connect。

同一商品的多个订单的载荷

如果您启用了同一产品的多个订单,则载荷会额外包含一个 orders 对象。其中包括与每个订单的使用权 ID 对应的唯一订单 ID。确保应用的登录页面可以响应这个新的 orders 字段。

{
  "iss": "https://www.googleapis.com/robot/v1/metadata/x509/cloud-commerce-partner@system.gserviceaccount.com",
  "iat": CURRENT_TIME,
  "exp": CURRENT_TIME + 5 minutes,
  "aud": "PARTNER_DOMAIN_NAME",
  "sub": "PROCUREMENT_ACCOUNT_ID",
  "google": {
    "roles": [GCP_ROLE],
    "user_identity": USER_ID,
    "orders": [ORDER_ID1, ORDER_ID2]
  }
}

其中:

  • ORDER_ID 是每个使用权 ID 的唯一订单 ID 列表,表示同一商品的不同优惠。只有在启用了同一产品的多个订单时,此字段才可用。

如需详细了解如何启用同一产品的多个订单,请参阅启用同一产品的多个订单

验证载荷

收到 JWT 后,您必须进行以下验证:

  1. 验证 JWT 签名是否使用 Google 提供的公钥

  2. 通过检查 exp 声明来验证 JWT 尚未过期。

  3. 验证 aud 声明是否为产品的正确网域。

  4. 验证 iss 声明是否为 https://www.googleapis.com/robot/v1/metadata/x509/cloud-commerce-partner@system.gserviceaccount.com

  5. 确认 sub 不为空。

使用 login_hint 启动 Google 登录

如果您希望用户通过您的网站完成 OAuth 2.0 同意流程,则可以使用载荷的身份信息,对重定向之前用于 Google Cloud 的 Google 账号初始化该流程。为此,您需要提供 JWT 中的 user_identity 作为 login_hint。如需了解详情,请访问 Google OAuth 2.0 文档

在用户通过您的网站完成 OAuth 2.0 流程后,您应该 确认该用户就是您希望其完成 OAuth 流程的用户。为此,您可以使用 OAuth 2.0 访问令牌来调用 Google UserInfo API 以获取基本用户信息。这将返回一个需要与 user_identity 字段。

为客户创建服务账号

如果您的产品需要服务账号,您可以与合作伙伴工程师合作 更改为:

  • 为客户预配服务账号以及
  • 设置服务账号管理页面,以便客户向服务账号授予所需的 Identity and Access Management (IAM) 角色。

您必须向客户提供此服务账号页面的链接。 通常是通过产品的管理控制台完成的

预配服务账号

要供应服务账号,请与合作伙伴工程师联系并提供以下信息:

  • 服务名称:这是一个唯一的产品 ID,用于区分您的产品与其他产品。我们建议您使用 创建 新手入门

  • 项目 ID:您在其中创建服务账号以访问客户资源的项目的 ID。您必须创建所有服务账号 产品在单个项目中使用的资源数量

  • IAM 角色和推理:IAM 角色 以及需要这些角色的原因。 此信息将分享给您的客户,并可能影响您的客户能否授予 对服务账号访问权限

如果您希望客户在向服务账号授予访问权限后返回您的网站,请将控制台的域名发送给您的合作伙伴工程师。您可以发送多个域名,包括子网域,例如 staging.example.com

将服务账号管理页面集成到您产品的控制台中

合作伙伴工程师会创建一个服务账号管理页面 向客户授予对服务账号的访问权限。然后,您链接到该页面 。

在合作伙伴工程师通知您 网页准备就绪之后,在网址中添加参数,然后从您的 控制台。

您必须向该网址添加两个参数:

  • service-name:这是您提供给合作伙伴工程师的服务名称。

  • service-account-email:这是您为客户创建的服务账号的电子邮件地址。每个客户都有一个唯一的服务账号。

以下示例显示了具有所需参数的网址:

https://console.cloud.google.com/marketplace-saas/service-account/service-name/service-account-email

您可以根据客户的需求。例如:

https://console.google.com/marketplace-saas/service-account/service-name/service-account-email;single=true;redirect=https%3A%2F%2Fexample.com

网址参数说明您的商品需要访问单个 Google Cloud 项目,并且客户可以返回到您的控制台。

网址参数列表

以下是您可以发送到该服务的网址参数列表 账号管理页面:

参数说明
service-name这是必填项。 这是您提供给合作伙伴工程师的服务名称。
service-account-email这是必填项。 这是您为客户创建的服务账号的电子邮件地址。
single如果为 true,则表示您的产品需要访问单个项目。
hints=project-id-1设置您希望服务账号访问的项目。使用英文逗号分隔项目。
filter=role1将授予服务账号的角色限制为提供给合作伙伴工程师的一部分角色。使用过滤条件时排除 roles/
redirect为客户提供用于返回到管理控制台的链接。您必须向合作伙伴工程师注册域名才能使用此参数。