单点登录的SAML响应

更新时间:

本文为您介绍进行单点登录(SSO登录)时SAML响应中必须包含的元素,尤其是SAML断言中的元素。

背景信息

在基于SAML 2.0SSO流程中,当企业用户在IdP登录后,IdP将根据SAML 2.0 HTTP-POST绑定的要求生成包含SAML断言的认证响应,并由浏览器(或程序)自动转发给阿里云。这个SAML断言会被用来确认用户登录状态并从中解析出登录的主体。因此,断言中必须包含阿里云要求的元素,否则登录用户的身份将无法被确认,导致SSO失败。

请参照SAML 2.0协议saml core标准中对XML的说明,确保SAML响应使用标准XML格式进行编码。

SAML响应

请确保您的IdP向阿里云发出符合如下要求的SAML响应,每一个元素都必须要有,否则SSO将会失败。

<saml2p:Response>
    <saml2:Issuer>...</saml2:Issuer>
    <saml2p:Status>
        ...
    </saml2p:Status>
    <saml2:Assertion>
        <saml2:Issuer>...</saml2:Issuer>
        <ds:Signature>
            ...
        </ds:Signature>
        <saml2:Subject>
            <saml2:NameID>${NameID}</saml2:NameID>
            <saml2:SubjectConfirmation>
                ...
            </saml2:SubjectConfirmation>
        </saml2:Subject>
        <saml2:Conditions>
            <saml2:AudienceRestriction>
                <saml2:Audience>${Audience}</saml2:Audience>
            </saml2:AudienceRestriction>
        </saml2:Conditions>
        <saml2:AuthnStatement>
            ...
        </saml2:AuthnStatement>
    </saml2:Assertion>
</saml2p:Response>

SAML断言中的元素说明

  • SAML 2.0协议的通用元素

    关于SAML 2.0协议的更多内容,请参见SAML 2.0

    元素

    说明

    Issuer

    Issuer的值必须与您在阿里云云SSOSSO设置中上传的元数据文件中的EntityID匹配。

    Signature

    阿里云要求SAML断言必须被签名以确保没有篡改,Signature及其包含的元素必须包含签名值、签名算法等信息。

    Subject

    Subject必须包含以下元素:

    • 有且仅有一个NameID元素,是阿里云账号下的某个云SSO用户的身份标识。详情请参见本文下面所述的NameID元素。

    • 有且仅有一个SubjectConfirmation元素,其中包含一个SubjectConfirmationData元素。SubjectConfirmationData必须有以下两个属性:

      • NotOnOrAfter:规定SAML断言的有效期。

      • Recipient:阿里云通过检查该元素的值来确保阿里云是该断言的目标接收方,其取值为云SSOSSO设置中的ACS URL

      以下是一个Subject元素的示例:

      <Subject>
        <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">Alice@abc.com</NameID>        
        <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">   
          <SubjectConfirmationData NotOnOrAfter="2019-01-01T00:01:00.000Z" Recipient="https://signin-cn-shanghai.alibabacloudsso.com/saml/acs/51d298a9-2a3f-4e23-97c7-7ad1cfa9****"/>    
        </SubjectConfirmation>
      </Subject>

    Conditions

    Conditions元素中,必须包含一个AudienceRestriction元素,其中可包含一至多个Audience元素,但必须有一个Audience元素的取值为云SSOSSO设置中的Entity ID,即https://signin-<region>.alibabacloudsso.com/saml/sp/<directoryID>。

    以下是一个Conditions元素的示例:

    <Conditions>
      <AudienceRestriction>
        <Audience>https://signin-cn-shanghai.alibabacloudsso.com/saml/sp/d-00fc2p61****</Audience>
      </AudienceRestriction>
    </Conditions>          
  • NameID元素

    阿里云SSO通过用户名(UserName)来定位一个云SSO用户,要求企业IdP生成的SAML断言包含用户的用户名。阿里云通过解析SAML断言中的元素,来匹配云SSO用户的用户名。

    因此,在配置IdP颁发的SAML断言时,需要将对应于云SSO用户的用户名(UserName)字段映射为SAML断言中的NameID元素,您可以根据IdP自行指定字段。

相关文档

如何在浏览器中查看SAML响应?