添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
开朗的毛衣  ·  import zmq.asyncio ...·  2 月前    · 
深情的长颈鹿  ·  How to Repair JPEG ...·  5 月前    · 
英俊的硬盘  ·  photoshop cs4-adobe ...·  5 月前    · 
英俊的啤酒  ·  iPhone - Apple·  5 月前    · 

本文为您介绍进行角色SSO时SAML响应中必须包含的元素,尤其是SAML断言中的元素。

背景信息

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

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:AttributeStatement>
            <saml2:Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName">
            </saml2:Attribute>
            <saml2:Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role">
            </saml2:Attribute>
        </saml2:AttributeStatement>
    </saml2:Assertion>
</saml2p:Response>

SAML断言中的元素说明

  • SAML 2.0协议的通用元素

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

    元素

    说明

    Issuer

    Issuer 的值必须与您在阿里云创建的 身份提供商 实体中上传的IdP元数据文件中的 EntityID 匹配。

    Signature

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

    Subject

    Subject 必须包含以下元素:

    • 有且仅有一个 NameID 元素。您必须按照SAML 2.0协议的要求自定义 NameID 的值,通常为SAML断言主体在IdP中的身份标识,阿里云不会依赖该元素的值来确认登录主体。

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

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

      • Recipient :阿里云通过检查该元素的值来确保阿里云是该断言的目标接收方,其取值必须为 https://signin.alibabacloud.com/saml-role/sso

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

      <Subject>
        <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">administrator</NameID>        
        <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">   
          <SubjectConfirmationData NotOnOrAfter="2019-01-01T00:01:00.000Z" Recipient="https://signin.alibabacloud.com/saml-role/sso"/>    
        </SubjectConfirmation>
      </Subject>

    Conditions

    Conditions 元素中,必须包含一个 AudienceRestriction 元素,其中可包含一至多个 Audience 元素,但必须有一个 Audience 元素的取值为 urn:alibaba:cloudcomputing:international

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

    <Conditions>
      <AudienceRestriction>
        <Audience>urn:alibaba:cloudcomputing:international</Audience>
      </AudienceRestriction>
    </Conditions>           
  • 阿里云要求的自定义元素

    在SAML断言的 AttributeStatement 元素中,必须包含以下阿里云要求的 Attribute 元素:

    • Name 属性值为 https://www.aliyun.com/SAML-Role/Attributes/Role Attribute 元素

      该元素为必选,可以有多个。其包含的 AttributeValue 元素取值代表允许当前用户扮演的角色,取值的格式是由角色ARN与身份提供商ARN组合而成的,中间用半角逗号(,)隔开。这两个ARN您可以在控制台获取:

      • 角色ARN:在 角色 页面,单击RAM角色名称,然后在 基本信息 区域查看对应的ARN。

      • 身份提供商ARN:在 SSO管理页面 角色SSO 页签下,单击身份提供商名称,然后在 身份提供商信息 区域查看对应的ARN。

      说明

      如果是多个,当使用控制台登录时,将会在界面上列出所有角色供用户选择。

      以下是一个Role Attribute 元素示例:

      <Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role">      
        <AttributeValue>acs:ram::$account_id:role/role1,acs:ram::$account_id:saml-provider/provider1</AttributeValue>
        <AttributeValue>acs:ram::$account_id:role/role2,acs:ram::$account_id:saml-provider/provider1</AttributeValue>
      </Attribute>               
      说明

      $account_id 是定义角色和身份提供商的阿里云账号ID。

    • Name 属性值为 https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName Attribute 元素

      该元素为必选且只能有一个。其包含的 AttributeValue 元素取值将被用来作为登录用户信息的一部分显示在控制台上和操作审计日志中。如果您有多个用户使用同一个角色,请确保使用可以唯一标识用户的 RoleSessionName 值,以区分不同的用户,如员工ID、Email地址等。

      AttributeValue 元素取值要求:长度不少于2个字符且不超过64个字符,只能是英文字母、数字和特殊字符 -_.@=

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

      <Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName">
        <AttributeValue>user_id</AttributeValue>
      </Attribute>                     
    • Name 属性值为 https://www.aliyun.com/SAML-Role/Attributes/SessionDuration Attribute 元素

      该元素为可选且最多只能有一个。其包含的 AttributeValue 元素取值为整数,单位为秒,最小值为900,最大值不能超过Role元素所代表的角色的最大会话时间。

      以下是一个SessionDuration Attribute 元素示例:

      <Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/SessionDuration">
        <AttributeValue>1800</AttributeValue>
      </Attribute>                  
  • 登录会话有效期

    通过控制台登录的情况下,通常SAML断言中设置的 SessionDuration 值将会被作为会话的有效期。如果您还定义了 AuthnStatement 元素的 SessionNotOnOrAfter 属性,那么 SessionDuration SessionNotOnOrAfter 的较小值将会被作为会话的有效期。如果以上两个值均不存在,则会话有效期取角色 最大会话时间 设置的值。登录会话有效期还会受到 登录会话的过期时间 的限制,即最终的登录会话有效期将不会超过此参数设置的值。详情请参见 管理RAM用户安全设置 设置RAM角色最大会话时间

    通过程序登录的情况下,如果您在调用 AssumeRoleWithSAML 时指定了 DurationSeconds 参数,同时您还定义了 AuthnStatement 元素的 SessionNotOnOrAfter 属性,那么 DurationSeconds SessionNotOnOrAfter 的较小值将会被作为STS Token有效期。如果以上两个值均不存在,则有效期取默认值3600秒。

相关文档

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