CDN加速

SSO的SAML响应

更新时间:2021-05-20 16:49:29

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

概要

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

SAML响应

<saml2p:Response
    <saml2:Issuer>${entityID}</saml2:Issuer>
    <ds:Signature>
     …
    </ds:Signature>
    <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:AttributeStatement>
          <saml2:Attribute Name="https://cas.wangsu.com/SAML/Attributes/LoginName" >
            …
          </saml2:Attribute>
		 <saml2:Attribute Name="https://cas.wangsu.com/SAML/Attributes/RoleSessionName">
            …
          </saml2:Attribute>
          …
        </saml2:AttributeStatement>
    </saml2:Assertion>
</saml2p:Response>


SAML断言中的元素说明

  • SAML 2.0协议的通用元素

元素说明
IssuerIssuer的值必须与您在网宿科技创建的身份提供商实体中上传的IdP元数据文件中的entityID匹配。
Signature要求SAML断言必须被签名以确保没有篡改,Signature及其包含的元素必须包含签名值、签名算法等信息。

Subject

Subject必须包含以下元素:

1)有且仅有一个NameID元素。NameID的值,通常为SAML断言主体在IdP中的身份标识(可以是IdP内部账号名称或者账号ID),网宿科技不依赖该元素的值来确认登录主体。

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

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

<saml2:Subject>

       <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">admin</saml2:NameID>

       <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">

                <saml2:SubjectConfirmationData

                    InResponseTo="_adafdaxfrpqkrf4cpnkfslpgxf76qeqmlwtag"

                    NotOnOrAfter="2021-04-29T18:57:29.367Z" Recipient="https://cas.wangsu.com/cas/login?client_name=mockClient"/>

      </saml2:SubjectConfirmation>

</saml2:Subject>

Conditions

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

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

<saml2:Conditions>

  <saml2:AudienceRestriction>

     <saml2:Audience>https://cas.wangsu.com/cas</saml2:Audience>

  </saml2:AudienceRestriction>

</saml2:Conditions>

  • 自定义元素要求

在SAML断言的AttributeStatement元素中,必须包含以下Attribute元素:
1)Name属性值为:https://cas.wangsu.com/SAML/Attributes/LoginName 的Attribute元素,该元素为必选,可以有多个(接口上支持传多个,但是程序上暂不支持,只会取第一个值)。其包含的AttributeValue 元素取值代表允许当前IdP用户可以使用网宿科技的哪个账号进行访问,取值的格式由用户描述及身份提供商描述组合而成,中间用英文逗号隔开。

<saml2:Attribute Name="https://cas.wangsu.com/SAML/Attributes/LoginName" >  
<saml2:AttributeValue>wsc:iam::${parentLoginName}:loginName/${loginName},wsc:iam::${parentLoginName}:saml-provider/${provider}</saml2:AttributeValue>        
     <saml2:AttributeValue>wsc:iam::${parentLoginName}:loginName/${loginName},wsc:iam::${parentLoginName}:saml-provider/${provider}</saml2:AttributeValue>  
</saml2:Attribute>

在这个属性中,其中:
•${parentLoginName}:替换为您在网宿科技对应的主账号;
•${loginName}:替换为您当前IdP用户要访问网宿科技所使用的网宿科技账号;
•${provider}:替换为您在网宿科技控制台上创建的 SAML 身份提供商名称。
2)Name属性值为:https://cas.wangsu.com/SAML/Attributes/RoleSessionName的Attribute元素,该元素为必选,只能有一个。其包含的AttributeValue元素取值将被用来作为登录用户信息的一部分显示在控制台上和操作审计日志中。该字段由用户自定义,长度不超过32个字符。其格式为:

<saml2:Attribute Name="https://cas.wangsu.com/SAML/Attributes/RoleSessionName">
     <saml2:AttributeValue>${NameID}</saml2:AttributeValue>          
</saml2:Attribute>

以下是一个 RoleSessionName Attribute 元素示例。

<saml2:Attribute Name="https://cas.wangsu.com/SAML/Attributes/RoleSessionName">
     <saml2:AttributeValue>admin</saml2:AttributeValue>          
</saml2:Attribute>