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

角色SSO的SAML响应

最近更新时间2023.10.26 16:05:14

首次发布时间2023.08.17 23:07:24

本文介绍完成基于SAML2.0的角色SSO时,火山引擎对于在IDP处进行SAML响应(SAML Response)参数配置基本要求。

SSO基本流程

SSO基本流程请参考:角色SSO概述
SAML响应在用户登录IDP后、请求登录火山引擎时,由IDP向火山引擎发送。火山引擎通过验证SAML响应中的签名、解析SAML响应中传递的当前用户身份信息,为用户实现安全快捷的SAML SSO登录。

SAML响应参数要求

SAML相应的基本格式示例如下,请确保您的SAML响应与下方示例格式相同、无元素缺失。

<samlp:Response>
    <saml:Issuer>...</saml:Issuer>
    <ds:Signature>
        ...
    </ds:Signature>
    <samlp:Status>
        ...
    </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 AuthnInstant="2022-11-28T12:23:13Z" SessionNotOnOrAfter="2022-11-29T12:23:14Z" SessionIndex="_843836cf-be88-4b39-8aac-29be31ad7894">
            ...
        </saml:AuthnStatement>
        <saml:AttributeStatement>
            <saml:Attribute Name="https://www.volcengine.com/SAML/Attributes/SessionName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
                ...
            </saml:Attribute>
            <saml:Attribute Name="https://www.volcengine.com/SAML/Attributes/Identity" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
                ...
            </saml:Attribute>
            <saml:Attribute Name="https://www.volcengine.com/SAML/Attributes/SessionDuration" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
                ...
            </saml:Attribute>            
        </saml:AttributeStatement>
    </saml:Assertion>
</samlp:Response>
元素说明
IssuerIssuer的值必须与您在火山引擎控制台设置中上传的用户SSO SAML元数据文件中的EntityID元素取值相同,火山引擎需要验证该字段来保证请求登录的身份提供商为已经完成信任配置的身份提供商。
Signature基于协议规范,火山引擎要求SAML响应必须签名,并能够基于IDP元数据文件中的安全证书信息验签通过,以确保响应内容安全可信。请在Response示例的对应位置进行签名,Signature必须包含签名值、签名算法等信息。

Subject

Subject必须包含以下元素:

  1. 有且仅有一个NameID元素,火山引擎角色SSO对于NameID取值无要求,该值通常用于标识企业用户的身份。您可以依据SAML协议规范自行指定NameID取值。。

  2. SubjectConfirmation元素中,以下字段需要包含唯一有效的取值:

    1. NotOnOrAfter:用于指定断言有效期,UTC时间。

    2. Recipient:火山引擎需要基于Recipient验证自身确实为当前响应的接收方,其取值必须为https://signin.volcengine.com/saml/sso

Subject元素示例:

<saml:Subject>
   <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress">user1@company.com</saml:NameID>
   <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <saml:SubjectConfirmationData NotOnOrAfter="2022-11-28T12:26:14Z" Recipient="https://signin.volcengine.com/saml/sso"></saml:SubjectConfirmationData>
   </saml:SubjectConfirmation>
  </saml:Subject>

Conditions

在Conditions元素中,必须包含一个AudienceRestriction元素,其中需要有包含唯一有效的Audience元素,用于指定响应的受众。其必须包含一个固定的值,且与火山引擎提供的角色SSO SAML元数据文件中的EntityID取值一致,格式为https://www.volcengine.com/
Conditions元素的示例:

<saml:Conditions NotBefore="2022-11-28T12:20:14Z" NotOnOrAfter="2022-11-28T12:26:14Z">
 <saml:AudienceRestriction>
  <saml:Audience>https://www.volcengine.com/</saml:Audience>
 </saml:AudienceRestriction>
</saml:Conditions>

AttributeStatement

AttributeStatement元素中,必须包含以下两个Attribute元素:

  1. 身份属性

    1. 属性的Name为固定值https://www.volcengine.com/SAML/Attributes/Identity

    2. 属性的值用于声明用于SSO登录的IAM角色的信息。至少包含一个属性值,可包含多个属性值,即一个企业用户可映射多个角色,如有多个则会在登录页面上列出供选择。取值为角色Trn,格式为:

      trn:iam::${AccountID}:role/${RoleName},trn:iam::${AccountID}:saml-provider/${SAMLProviderName}。
          其中AccountID为您的火山引擎账号ID,RoleName为IAM角色名称,SAMLProviderName为身份提供商名称。

  2. 会话名称属性。必须包含一个该属性。

    1. 属性的Name为固定值https://www.volcengine.com/SAML/Attributes/SessionName

    2. 属性的值用于指定会话名称。必须包含一个属性值,属性值可自定义,用作登录后的名称展示和审计。

  3. 会话时长属性。可选包含该属性,且至多包含一个。

    1. 属性的Name为固定值https://www.volcengine.com/SAML/Attributes/SessionDuration

    2. 属性的值用于指定角色登录态时长。如不传递该属性,则默认角色的最大登录时长为3600秒。如传递该属性,则必须包含一个属性值,属性值需要在900-43200秒之间,用于指定角色的登录态时长。

AttributeStatement元素的示例:

<saml:AttributeStatement>
   <saml:Attribute Name="https://www.volcengine.com/SAML/Attributes/Identity" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
    <saml:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">trn:iam::${AccountID}:user/user1,trn:iam::${AccountID}:saml-provider/onelogin</saml:AttributeValue>
   </saml:Attribute>
   <saml:Attribute Name="https://www.volcengine.com/SAML/Attributes/SessionName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
    <saml:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">sessionNameForRole</saml:AttributeValue>
   </saml:Attribute>
   <saml:Attribute Name="https://www.volcengine.com/SAML/Attributes/SessionDuration" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
    <saml:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">7200</saml:AttributeValue>
   </saml:Attribute>
  </saml:AttributeStatement>

下一步操作

你可以尝试登录到火山引擎,具体登录方式请参考:单点登录的多种登录方式