文档中心 访问控制 SSO的SAML响应

SSO的SAML响应

更新时间:2023-12-14 15:11:26

本文为您介绍SSO时SAML响应中必须包含的元素。

概要

在基于SAML2.0的SSO流程中,当企业用户在IdP登录后,IdP将生成包含SAML断言的认证响应,并由浏览器自动转发给网宿。这个SAML断言会被用来确认用户登录状态并从中解析出登录的主体。因此,断言中必须包含网宿要求的元素,否则登录用户的身份将无法被确认,导致SSO失败。

SAML响应

<saml2p:Response>
    <saml2:Issuer>${entityID}</saml2:Issuer>
    <saml2p:Status>
        ...
    </saml2p:Status>
    <saml2:Assertion>
        <saml2:Issuer>${entityID}</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协议的通用元素

元素
说明
Issuer
Issuer的${entityID}值必须与您在控制台用户SSO设置中上传的元数据文件中的entityID匹配。
Signature 要求SAML断言必须被签名以确保没有篡改,Signature及其包含的元素必须包含签名值、签名算法等信息。
Subject

Subject必须包含以下元素:

  • 有且仅有一个NameID元素,是网宿账号下的某个IAM用户的身份标识。

单点登录时,需要识别具体是哪个IAM用户,所以需要企业IdP生成的SAML断言中包含用户信息。通过解析SAML断言中的NameID元素,来配置IAM用户从而实现用户SSO。

  • 如果用户有开启辅助域名时,则辅助域名作为NameID元素的后缀,即NameID元素内容为:<loginName>@<辅助域名>。比如IAM用户名为 abc,辅助域名为 cdn.com,则NameID:abc@cdn.com
  • 如果用户未开启辅助域名时,则NameID元素内容为:<loginName>。比如IAM用户为abc,则NameID:abc


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

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

Recipient:网宿科技通过检查该元素的值来确保网宿科技是该断言的目标接收方,取值必须为:https://cas.wangsu.com/cas/login?client_name=${provider}。

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

<Subject>
    <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">abc@wangsu.com</NameID>       
        <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">  
        <SubjectConfirmationData NotOnOrAfter="2023-11-23T18:57:29.367Z" Recipient="https://cas.wangsu.com/cas/login?client_name=${provider}"/>   
    </SubjectConfirmation>
</Subject>
Conditions

在Condition元素中,必须包含一个AudienceRestriction元素,其中可包含一至多个Audience元素,但必须有一个Audience元素的取值为 https://cas.wangsu.com

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

<saml2:Conditions>
    <saml2:AudienceRestriction>
        <saml2:Audience>https://cas.wangsu.com</saml2:Audience>
    </saml2:AudienceRestriction>
</saml2:Conditions>
本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!