本文為您介紹進行角色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
元素取值將被用來作為登入使用者資訊的一部分顯示在控制台上和Action Trail日誌中。如果您有多個使用者使用同一個角色,請確保使用可以唯一標識使用者的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秒。