1、什么是SAML:
SAML是Web瀏覽器用來通過安全令牌啟用單點登錄(SSO)的標准協議
2、優點:
跨多個應用程序管理用戶身份和授權。
3、單點登錄(SSO)是什么:
它使用戶僅使用一組憑據(用戶名和密碼)登錄一次,就可以安全地對多個應用程序和網站進行身份驗證。
4、SSO如何工作?
使用SSO,用戶嘗試訪問的應用程序或網站依賴於受信任的第三方來驗證用戶的身份。
5、SAML 相關定義
-
SP(Service Provider): 向用戶提供正式商業服務的實體,通常需要認證一個用戶的身份;
-
IDP(Identity Provider): 提供用戶的身份鑒別,確保用戶是其所聲明的身份
-
斷言 (Assertions) 即信息:斷言是在 SAML 中用來描述認證的對象,其中包括一個用戶在什么時間、以什么方式被認證,同時還可以包括一些擴展信息,比如用戶的 Email 地址和電話等等。
- 協議 (Protocol) 即通信:協議規定如何執行不同的行為。這些行為被細化成一些列的 Request 和 Response 對象,而在這些請求和相應的對象中包含了行為所特別需要的信息。
-
綁定 (Binding) 即傳輸:綁定定義了 SAML 信息如何使用通信協議被傳輸的。比如,HTTP 重定向綁定,即聲明 SAML 信息將通過 HTTP 重定向消息傳輸;再比如 SAML SOAP 綁定,聲明了通過 SOAP 來傳遞 SAML 消息。比如上面 AuthnRequest 就聲明了 Http-POst 綁定
- 元數據 (MetaData):SAML 的元數據是配置數據,其包含關於 SAML 通信各方的信息,比如通信另一方的 ID、Web Service 的 IP 地址、所支持的綁定類型以及通信中實用的密鑰等等。
6、saml標准的結構:
saml標准從內到外 可以分為上圖的4個層次:
1. Assertion。 斷言。 規定了斷言的xml結構, 例如:
==============
<saml:Assertion>
..............
</saml:Assertion?
==============
它規定了,這個assertion節點到底該怎么寫, 其實就是這個節點的schema。 按照這個規定寫出來的assertion別人才能認識。
2. Protocols。協議。它規定了如何請求(samlrequest)和回復(samlresponse )saml消息,其中當然包含assertion的消息。比如:
===============
<samlp:AuthnRequest>
............
</samlp:AuthnRequest>
還有:
<samlp:Response>
..............
</samlp:Response>
===============
它規定了怎么發送這些請求消息,和回復消息的結構。 這樣sp,idp之間才能通信。
3. 綁定。 上面兩點都是規定了靜態結構。 具體這些消息怎么發送呢。 就是用什么協議來承載這些smal消息呢。就是綁定出馬了。 最常用的就是http或者soap消息。 把上面的saml消息通過http或者soap消息來傳輸。 這樣sp和idp就能通信了。 saml1.1只支持 http的soap綁定。 而saml2.0支持更多的綁定。 有興趣自己閱讀標准。 這里需要強調的是, 你可能已經想到了,那就是這個綁定其實不重要。 只要saml消息本身是完整的可靠的,下層用什么協議傳輸不重要。 對。 saml標准規定的綁定只是一種標准實現。 saml的消息可以綁定到任何協議上, 只要sp和idp實現協商好就行了。 這里面應用最廣泛的恐怕要算saml的wss綁定了。 用在微軟的一系列產品里面。 包括sharepoint online的登陸授權, windows azure登陸,以及windows store的登陸授權等等。 微軟自己在ws-trust和ws-secure協議上傳輸了saml消息。 這恐怕是saml標准以外用的最多的綁定了。
4. Profile, 這個單詞我實在不知道翻譯成啥好,所以就寫原文把。 我個人喜歡把它叫做一套配置,或者叫解決方案。 它規定了某些場景下一整套saml認證的細節和步驟。 比如, 它規定了比較著名的SSO方案。 就是如何用saml實現sso的一整套配置和詳細步驟。 概念就是這樣。 同上, 上面的綁定都不確定,所以這個profile就更自由了。 你可以使用任何自己定義的profile,只要你們自己協商好就行了。