單點登錄的SAML響應(yīng)
本文為您介紹進(jìn)行單點登錄(SSO登錄)時SAML響應(yīng)中必須包含的元素,尤其是SAML斷言中的元素。
背景信息
在基于SAML 2.0的SSO流程中,當(dāng)企業(yè)用戶在IdP登錄后,IdP將根據(jù)SAML 2.0 HTTP-POST綁定的要求生成包含SAML斷言的認(rèn)證響應(yīng),并由瀏覽器(或程序)自動轉(zhuǎn)發(fā)給阿里云。這個SAML斷言會被用來確認(rèn)用戶登錄狀態(tài)并從中解析出登錄的主體。因此,斷言中必須包含阿里云要求的元素,否則登錄用戶的身份將無法被確認(rèn),導(dǎo)致SSO失敗。
請參照SAML 2.0協(xié)議saml core標(biāo)準(zhǔn)中對XML的說明,確保SAML響應(yīng)使用標(biāo)準(zhǔn)XML格式進(jìn)行編碼。
SAML響應(yīng)
請確保您的IdP向阿里云發(fā)出符合如下要求的SAML響應(yīng),每一個元素都必須要有,否則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:Assertion>
</saml2p:Response>
SAML斷言中的元素說明
SAML 2.0協(xié)議的通用元素
關(guān)于SAML 2.0協(xié)議的更多內(nèi)容,請參見SAML 2.0。
元素
說明
Issuer
Issuer
的值必須與您在阿里云云SSO的SSO設(shè)置中上傳的元數(shù)據(jù)文件中的EntityID
匹配。Signature
阿里云要求SAML斷言必須被簽名以確保沒有篡改,
Signature
及其包含的元素必須包含簽名值、簽名算法等信息。Subject
Subject
必須包含以下元素:有且僅有一個
NameID
元素,是阿里云賬號下的某個云SSO用戶的身份標(biāo)識。詳情請參見本文下面所述的NameID元素。有且僅有一個
SubjectConfirmation
元素,其中包含一個SubjectConfirmationData
元素。SubjectConfirmationData
必須有以下兩個屬性:NotOnOrAfter
:規(guī)定SAML斷言的有效期。Recipient
:阿里云通過檢查該元素的值來確保阿里云是該斷言的目標(biāo)接收方,其取值為云SSO的SSO設(shè)置中的ACS URL
。
以下是一個
Subject
元素的示例:<Subject> <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">Alice@abc.com</NameID> <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"> <SubjectConfirmationData NotOnOrAfter="2019-01-01T00:01:00.000Z" Recipient="https://signin-cn-shanghai.alibabacloudsso.com/saml/acs/51d298a9-2a3f-4e23-97c7-7ad1cfa9****"/> </SubjectConfirmation> </Subject>
Conditions
在
Conditions
元素中,必須包含一個AudienceRestriction
元素,其中可包含一至多個Audience
元素,但必須有一個Audience
元素的取值為云SSO的SSO設(shè)置中的Entity ID
,即https://signin-<region>.alibabacloudsso.com/saml/sp/<directoryID>。以下是一個
Conditions
元素的示例:<Conditions> <AudienceRestriction> <Audience>https://signin-cn-shanghai.alibabacloudsso.com/saml/sp/d-00fc2p61****</Audience> </AudienceRestriction> </Conditions>
NameID元素
阿里云SSO通過用戶名(UserName)來定位一個云SSO用戶,要求企業(yè)IdP生成的SAML斷言包含用戶的用戶名。阿里云通過解析SAML斷言中的元素,來匹配云SSO用戶的用戶名。
因此,在配置IdP頒發(fā)的SAML斷言時,需要將對應(yīng)于云SSO用戶的用戶名(UserName)字段映射為SAML斷言中的
NameID
元素,您可以根據(jù)IdP自行指定字段。