You need to enable JavaScript to run this app.
导航

如何完成SAML SSO登录配置

最近更新时间2024.03.25 20:59:25

首次发布时间2024.03.25 20:59:25

背景信息

本文介绍基于SAML 2.0协议单点登录到云身份中心登录门户的配置方法。基本概念和基础介绍见:云身份中心登录门户的单点登录概述

前提条件

  1. 已具备可用的企业身份系统,且身份系统支持SAML 2.0单点登录协议,如飞书、飞连、Azure AD、Okta或其他采购/自建的系统。
  2. 已经创建或同步云身份中心用户。在单点登录过程中,云身份中心用户名称需要与企业身份系统传递的用户信息(例如用户ID、用户名、邮箱等)一一映射,请保证云身份中心用户名称准确。

1.1 SAML SSO 基本流程

以SAML协议为例,一个SSO的流程图如下:
用户SSO握手流程图

  1. 企业用户浏览器直接通过云身份中心门户登录界面或通过第三方IdP界面链接发起单点登录请求。如通过IdP

  2. 云身份中心SSO服务向企业用户浏览器发送SAML Request。

  3. 企业用户浏览器转发SAML Request。

  4. IdP认证已登录用户并发送含有企业用户对应的IAM用户信息的SAML Response。

  5. 企业用户浏览器向云身份中心SSO服务转发SAMLResponse。

  6. SSO服务解析SAML Response并通过SAML互信配置,验证SAML Response真伪。

  7. SAML Response解析后通过其内部信息匹配对应的云身份中心用户。

  8. 云身份中心SSO服务向企业用户浏览器返回云身份中心登录门户URL。

  9. 企业用户浏览器重定向,企业用户使用对应云身份中心用户身份登录云身份中心用户门户。

操作步骤

为了实现用户SSO,需要分别在IdP和SP的系统中上传相关元数据文件,配置双方系统互信关系,并建立企业IdP用户与IAM用户的对应关系。

1. 云身份中心内操作步骤

首先将企业IdP配置为云身份中心的可信身份提供商。

  1. 在IdP系统中,获取到IdP的元数据文件。元数据文件支持标准XML格式,大小为100kb以内。
  2. 在云身份中心控制台的用户登录设置,可以看到登录方式配置模块,在身份提供商信息处点击上传IdP元数据文件。

说明

上传成功后,您可在登录门户地址处看到可用的员工登录地址,可以根据需求自定义登录地址。

  1. 登录方式配置模块,服务提供商信息处可以下载云身份中心的SP元数据文档,也可以复制文档中的关键信息ACS URL和Entity ID至身份提供商处。

2. 企业身份系统内操作步骤

其次将云身份中心作为SP配置为企业IdP可信的服务提供商。
在企业IdP,基于上一步中已经获取的SP元数据,创建云身份中心服务提供商,建立企业IdP对云身份中心的信任。该过程基于不同IdP的情况可能的配置方式有:

  1. 直接提供SP元数据的URL;
  2. 上传上一步中下载的元数据文件;
  3. 基于元数据文件中的内容,手动在企业IdP中配置SP相关参数:
    1. Entity ID:用于标识服务提供商,需要配置为元数据文件中EntityDescriptor元素中的entityID属性值,对应步骤一中的Entity ID。
    2. ACS URL:用于声明SAML断言发送地址,需要配置为下载的元数据中,AssertionConsumerService元素的Location属性值,对应步骤一中的ACS URL。

至此,配置成功。

SAML Response格式要求

在用户登录IdP后、请求登录云身份中心门户时,IdP会向云身份中心门户发送SAML Response。云身份中心登录门户通过验证SAML Response中的签名、解析SAML Response中传递的当前用户身份信息,为用户实现安全快捷的SAML SSO登录。

在配置完成后,调试登录流程时,SAML Response需要满足下述格式,请确保您的SAML Response与下方示例格式相同、无元素缺失。

<samlp:Response>
    <saml:Issuer>${Issuer}</saml:Issuer>
    <ds:Signature>
        ...
    </ds:Signature>
    <samlp:Status>
        <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"></samlp:StatusCode>
    </samlp:Status>
    <saml:Assertion>
        <saml:Issuer>...</saml:Issuer>
        <ds:Signature>
            ...
        </ds:Signature>
        <saml:Subject>
            <saml:NameID>${NameID}</saml:NameID>
            <saml:SubjectConfirmation>
                ...
            </saml:SubjectConfirmation>
        </saml:Subject>
        <saml:Conditions>
            <saml:AudienceRestriction>
                <saml:Audience>${Audience}</saml:Audience>
            </saml:AudienceRestriction>
        </saml:Conditions>
        <saml:AuthnStatement>
            ...
        </saml:AuthnStatement>
    </saml:Assertion>
</samlp:Response>
元素说明
IssuerIssuer的值必须与您在云身份中心控制台设置中上传的IdP SAML元数据文件中的EntityID元素取值相同,云身份中心登录门户需要验证该字段来保证请求登录的身份提供商为已经完成信任配置的身份提供商。
Signature基于协议规范,云身份中心登录门户要求SAML Response必须签名,并能够基于IdP元数据文件中的安全证书信息验签通过,以确保响应内容安全可信。请在Response示例的对应位置进行签名,Signature必须包含签名值、签名算法等信息。

Subject

Subject必须包含以下元素:

  1. 有且仅有一个NameID元素,用于指定需要登录的云身份中心用户。NameID取值需要为云身份中心用户的用户名,请确保对应用户存在。
  2. SubjectConfirmation元素中,以下字段需要包含唯一有效的取值:
    1. NotOnOrAfter:用于指定断言有效期,UTC时间。
    2. Recipient:云身份中心登录门户需要基于Recipient验证自身确实为当前响应的接收方,其取值必须为云身份中心控制台上提供的服务提供商ACS URL。格式为:https://signin.volcengine.com/cloudidentity/${Region}/${UUId}/saml/sso

Subject元素示例:

<saml:Subject>
   <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">user1</saml:NameID>
   <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <saml:SubjectConfirmationData NotOnOrAfter="2024-02-28T12:26:14Z" Recipient="https://signin.volcengine.com/cloud-identity/cn-beijing/950***-8***8-c***9-f***8-d***b4/saml/sso"></saml:SubjectConfirmationData>
   </saml:SubjectConfirmation>
  </saml:Subject>

Conditions

在Conditions元素中,必须包含一个AudienceRestriction元素,其中需要有包含唯一有效的Audience元素,用于指定响应的受众。其必须包含一个固定的值,其取值必须为云身份中心控制台上提供的服务提供商EntityID,格式为https://signin.volcengine.com/cloud-identity/saml/sso/${CloudIdentity_Instance_Id}
Conditions元素的示例:

<saml:Conditions NotBefore="2024-02-28T12:20:14Z" NotOnOrAfter="2024-02-28T12:26:14Z">
 <saml:AudienceRestriction>
  <saml:Audience>https://signin.volcengine.com/cloud-identity/saml/sso/2****************</saml:Audience>
 </saml:AudienceRestriction>
</saml:Conditions>