单点登录

Last reviewed 2023-02-27 UTC

您可以配置 Cloud Identity 或 Google Workspace 账号以使用单点登录 (SSO)。启用 SSO 后,当用户尝试访问 Google 服务时,系统将不会提示他们输入密码,而是会将其重定向到外部身份提供商 (IdP) 进行身份验证。

使用 SSO 具有以下几项优势:

  • 您可以为用户提供更好的体验,因为他们可以使用其现有凭据进行身份验证,而无需经常输入凭据。
  • 您可以确保现有 IdP 仍是用于对用户进行身份验证的记录系统。
  • 您无需将密码同步到 Cloud Identity 或 Google Workspace。

如需使用 SSO,用户必须具有 Cloud Identity 或 Google Workspace 用户账号,并在外部 IdP 中具有相应的身份。因此,SSO 通常与可将用户自动预配到 Cloud Identity 或 Google Workspace 的外部权威来源结合使用。

单点登录过程

Cloud Identity 和 Google Workspace 支持使用安全断言标记语言 (SAML) 2.0 进行单点登录。SAML 是一种用于在 SAML IdP 和 SAML 服务提供商之间交换身份验证和授权数据的开放标准。在将 SSO 用于 Cloud Identity 或 Google Workspace 时,外部 IdP 是 SAML IdP,Google 是 SAML 服务提供商。

Google 实现了 SAML 2.0 HTTP POST 绑定。 此绑定指定 SAML IdP 和 SAML 服务提供商之间如何交换身份验证信息。下图通过示例说明了您在使用 SSO 访问 Google Cloud 控制台时此过程的工作原理。

使用 SSO 访问 Google Cloud 控制台。

  1. 将浏览器指向 Google Cloud 控制台(或需要身份验证的任何其他 Google 资源)。
  2. 由于您尚未进行身份验证,因此 Google Cloud 控制台会将浏览器重定向到 Google 登录。
  3. Google 登录会返回一个登录页面,提示您输入电子邮件地址。
  4. 您需要输入电子邮件地址并提交表单。
  5. Google 登录查找与您的电子邮件地址关联的 Cloud Identity 或 Google Workspace 账号。
  6. 由于关联的 Cloud Identity 或 Google Workspace 账号已启用单点登录,因此 Google 登录会将浏览器重定向到已配置的外部 IdP 的网址。在发出重定向之前,它会向该网址添加两个参数 RelayStateSAMLRequest

    • RelayState 包含外部 IdP 稍后应传回的标识符。
    • SAMLRequest 包含 SAML 身份验证请求,即一个使用 Deflate 压缩过的、采用 base64 编码和网址编码的 XML 文档。从解码形式看,SAML 身份验证请求类似于以下内容:

      <samlp:AuthnRequest
              ProviderName="google.com"
              IsPassive="false"
              AssertionConsumerServiceURL="https://www.google.com/a/example.com/acs"
              ...>
        <saml:Issuer xmlns:saml="...">google.com</saml:Issuer>
        <samlp:NameIDPolicy
              AllowCreate="true"
              Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/>
      </samlp:AuthnRequest>
      

    此示例请求指示外部 IdP 对用户进行身份验证,为受众群体 google.com 创建 SAML 断言,并将其发布到断言消费者服务 (ACS),网址为 https://www.google.com/a/example.com/acs

    ACS 网址 (example.com) 中嵌入的网域与您的 Google Workspace 或 Cloud Identity 账号的主域名相对应。

    如果在配置 SSO 时使用网域特定的颁发者功能,则颁发者为 google.com/a/DOMAIN 而不是 google.com,其中,DOMAIN 是您的 Cloud Identity 或 Google Workspace 账号的主域名。

    外部 IdP 为执行身份验证所采取的步骤取决于 IdP 及其配置 - 例如,它可能显示登录对话框,也可能提示进行 MFA 或指纹验证。成功完成这些步骤后,将继续进行 SAML 交换:

    使用 SSO 进行 SAML 交换。

  7. 外部 IdP 返回一个特别设计的 HTML 页面,该页面使您的浏览器立即向 ACS 网址发送 HTTP POST 请求。此请求包含两个参数:

    • RelayState,该参数包含最初在 SAML 身份验证请求中传递给 IdP 的值。
    • SAMLResponse,该参数包含采用 base64 编码的 SAML 断言。SAML 断言是一个声明 IdP 已成功对用户进行身份验证的 XML 文档。从解码形式看,SAML 断言类似于以下内容:

      <samlp:Response ...>
        ...
        <Assertion x...>
          <Issuer>https://idp.example.org/</Issuer>
          <Signature ...>
            ...
          </Signature>
          <Subject>
            <NameID Format="...:nameid-format:emailAddress">bob@example.org</NameID>
            ...
          </Subject>
          <Conditions NotBefore="..." NotOnOrAfter="...">
            <AudienceRestriction>
              <Audience>google.com</Audience>
            </AudienceRestriction>
          </Conditions>
          <AttributeStatement>
            ...
          </AttributeStatement>
          <AuthnStatement AuthnInstant="..." ...>
            <AuthnContext>
              <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
            </AuthnContext>
          </AuthnStatement>
        </Assertion>
      </samlp:Response>
      

    此示例断言已针对受众群体 google.com(匹配 SAML 身份验证请求的颁发者)发出,并且声明 IdP https://idp.example.org/ 已对用户 bob@example.org 进行身份验证。

    SAML 断言还包含数字签名。IdP 使用签名证书的私钥来创建此签名。只有 IdP 知道该私钥。相应的公钥是 Cloud Identity 或 Google Workspace 中 SSO 配置的一部分,并与 Google 登录共享。

    SAML 断言还包含使 SAML 服务提供商能够验证断言真实性的数字签名。

  8. 浏览器将 SAML 断言发布到 Google ACS 端点。

  9. ACS 端点验证 SAML 断言的数字签名。 执行此项检查的目的是确保断言来自受信任的外部 IdP 并且未遭到篡改。假设签名有效,ACS 端点会分析断言的内容,包括验证其受众群体信息和读取 NameID 属性。

  10. ACS 端点通过将 SAML 断言的 NameID 与用户的主电子邮件地址进行匹配来查找您的用户账号。然后,该端点将启动会话。

  11. 端点会根据 RelayState 参数中编码的信息确定您最初打算访问的资源的网址,然后您会重定向到 Google Cloud 控制台。

IdP 发起的登录

上一部分中列出的过程有时称为“服务提供商发起的登录”,因为该过程从服务提供商(在前面的示例中为 Google Cloud 控制台)开始。

SAML 还定义了一个名为“IdP 发起的登录”的替代流程,该流程从 IdP 开始。Google 不支持此流程,但您可以通过使用以下网址启动服务提供商发起的登录来获得类似结果:

https://www.google.com/a/DOMAIN/ServiceLogin?continue=https://console.cloud.google.com/

在本示例中,DOMAIN 是您的 Cloud Identity 或 Google Workspace 账号的主域名。

多重身份验证

为防止用户账号遭到未经授权的访问,您可以要求用户在身份验证期间提供第二重身份验证。使用单点登录时,可通过以下两种方式来实现多重身份验证:

  1. 如果您的外部 IdP 支持多重身份验证,您可以让该 IdP 在基于 SAML 的登录过程中执行多重身份验证。在此情况下,无需在 Cloud Identity 或 Google Workspace 中进行其他配置。
  2. 如果您的 IdP 不支持多重身份验证,您可以配置 Cloud Identity 或 Google Workspace 账号,以在用户使用外部 IdP 进行身份验证后立即执行两步验证

网络

在 SAML 2.0 HTTP 重定向绑定中,IdP 和服务提供商不直接通信。所有通信均通过用户浏览器进行中继,如下图所示:

正在通过用户浏览器进行中继的通信。

在此架构下,只要用户能够从您的公司网络访问 IdP,便无需通过互联网公开 IdP,甚至无需互联网访问。

外部 IdP 的配置

Cloud Identity 和 Google Workspace 可让您使用以下功能配置单点登录:

  • SAML 个人资料:您可以为要集成的每个 IdP 创建 SAML 配置文件。您可以为 Cloud Identity 或 Google Workspace 账号中的每个用户、群组或组织单元决定他们是否必须使用 SSO 以及他们必须使用哪些 SAML 配置文件。

  • 经典版组织 SSO 配置文件:您可以创建单个组织配置文件以与单个 IdP 集成。对于您 Cloud Identity 或 Google Workspace 账号的每个用户、群组或组织单元,您可以决定他们是否必须使用 SSO。

配置 IdP 的正确方法取决于您使用的是 SAML 配置文件还是经典版组织配置文件。下表总结了通常必须在外部 IdP 中配置以帮助确保兼容性的设置。

配置 经典版组织配置文件的
必需设置
SAML 配置文件的
必需设置
备注
名称 ID 用户的主电子邮件地址 用户的主电子邮件地址
名称 ID 格式 urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
实体 ID

如果启用了网域特定的颁发者功能:

google.com/a/DOMAIN

如果停用了网域特定的颁发者功能(默认设置):

google.com

如果要将多个 Google Workspace 或 Cloud Identity 账号与同一 IdP 集成,请使用网域特定的颁发者功能。否则,请停用该功能。

您的 SAML 配置文件的唯一实体 ID。

根据 SAML 配置文件的创建日期,实体 ID 可以使用以下格式之一:

https://accounts.google.com/samlrp/metadata?rpid=ID

https://accounts.google.com/samlrp/ID

ACS 网址格式(或重定向网址) https://www.google.com/a/* 您的 SAML 配置文件的唯一 ACS 网址。

根据 SAML 配置文件的创建日期,该网址采用以下任一格式:

https://accounts.google.com/samlrp/acs?rpid=ID

https://accounts.google.com/samlrp/ID/acs

请求签名 停用 停用 Google 登录发出的 SAML 身份验证请求从不签名。
断言签名 启用 启用 必须对 SAML 断言进行签名才能使 Google 登录验证其真实性。

在管理控制台中设置 SSO 时,必须上传令牌签名密钥对的公钥。
断言加密 停用 停用
签名算法 RSA-SHA256 RSA-SHA256 RSA-SHA256 有时缩写为 RS256

后续步骤