2016-05-13 34 views
1

道歉,如果這些似乎是重複的,但我一直在尋找的帖子,我無法找到我正在尋找什麼。SAML響應 - 需要驗證哪些信息才能確保響應可信?

我的web應用程序正在將身份驗證請求發送到Azure以進行單點登錄。收到響應後,需要驗證哪些字段和屬性以確保斷言可信,爲什麼?

一個例子反應是這裏從Microsoft文檔 -

<samlp:Response ID="_a4958bfd-e107-4e67-b06d-0d85ade2e76a" Version="2.0" IssueInstant="2013-03-18T07:38:15.144Z" Destination="https://contoso.com/identity/inboundsso.aspx" InResponseTo="id758d0ef385634593a77bdf7e632984b6" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"> 
    <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer> 
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
    ... 
    </ds:Signature> 
    <samlp:Status> 
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" /> 
    </samlp:Status> 
    <Assertion ID="_bf9c623d-cc20-407a-9a59-c2d0aee84d12" IssueInstant="2013-03-18T07:38:15.144Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> 
    <Issuer>https://login.microsoftonline.com/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer> 
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     ... 
    </ds:Signature> 
    <Subject> 
     <NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID> 
     <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"> 
     <SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" /> 
     </SubjectConfirmation> 
    </Subject> 
    <Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z"> 
     <AudienceRestriction> 
     <Audience>https://www.contoso.com</Audience> 
     </AudienceRestriction> 
    </Conditions> 
    <AttributeStatement> 
     <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"> 
     <AttributeValue>[email protected]</AttributeValue> 
     </Attribute> 
     <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier"> 
     <AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue> 
     </Attribute> 
     ... 
    </AttributeStatement> 
    <AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12"> 
     <AuthnContext> 
     <AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef> 
     </AuthnContext> 
    </AuthnStatement> 
    </Assertion> 
</samlp:Response> 

我迄今知道的。

  • 您必須驗證簽名以確保消息未被修改。
  • 您必須驗證證書公鑰來自受信任的來源,否則任何有效簽名的證書都將進行身份驗證。

還有什麼?

回答

2
  • 簽名 - 請記住check the references
  • 確認證書來自正確的對等方(如您自己注意到的)
  • 斷言的條件。

我建議您不要爲此編寫自己的代碼,而應使用現有的SAML2 SP庫。讓所有這些都是正確的(我已經完成了這項工作,如果我知道它有多少工作,我不確定我會這麼做)。

+0

安德斯太謙虛了,不提他自己的圖書館https://github.com/KentorIT/authservices。如果您在該圖書館的封面下挖掘,您可以找到模塊直接驗證並解開令牌 - 如果需要的話 - 或者只是讓圖書館爲該網站完成所有工作(如果適合)。它非常好,我用它在幾個系統上進行生產。 – Frans

+0

感謝您鏈接關於檢查參考信息,我發現它非常有見地 - 絕對是我錯過的支票! – hireSwish