隨著互聯網的普及,物聯網的逼近,數字化時代的真正到來,身份認證與訪問授權的重要性越來越凸顯。SAML(安全聲明標記語言)標準定義了供應商提供身份驗證與授權服務的方式。那么關于SAML,我們需要知道些什么呢?
首先,SAML是可在網絡中多臺計算機上共享安全憑證的一個開放標準。該標準描述了一個框架,可使1臺計算機代表其他多臺計算機執行某些安全功能。
身份驗證:確定用戶身份與其所聲稱的相符
授權:確定用戶是否有權訪問特定系統或內容
嚴格來講,SAML是指用于編碼所有這些信息的XML變體語言,但該術語也涵蓋了組成該標準的各種協議消息和資料。
SAML 2.0在2005年引入,仍是該標準的當前版本。之前的1.1版如今已基本棄用。
SAML是實現單點登錄(SSO)的一種方法,且SSO也確實是SAML最常見的用例。我們可以從SSO開始討論SAML的用途,然后深入SAML的組件和操作。
SSO是什么?它能干什么?
單點登錄(SSO),可使用戶提供一次安全憑證(比如用戶名/口令對),就能以之訪問多個系統、平臺、App或其他資源。該方法能將用戶從記憶多組登錄名及口令的負擔中解脫出來,也可令IT團隊不用再將多個服務整合到一臺服務器上,真是讓事情簡單不少。
比如說,公司可用SSO讓用戶既能登錄內部服務器上運行的專用Web應用,也能登錄托管在SaaS上的ERP(企業資源計劃)系統。
想要發揮SSO的功用,用戶必須要能經過身份驗證就收到授權。基于其被證實的身份,訪問其他多臺計算機。或者以另一種方式:1臺計算機向在其他多臺計算機上被授權的用戶提供服務。SAML標準定義了所有這些計算機之間相互安全通信的方式。
SAML提供者是什么?
SAML術語中,提供者是系統中的一個實體,通常來講就是一臺服務器或其他計算機,幫助用戶訪問所需的服務。提供或消費SAML服務的系統,一般被稱為服務提供者;最重要的一種服務提供者,就是身份提供者。
身份提供者是什么?
身份提供者是系統中的一個實體,用于確保用戶真的是其所聲稱的身份——提供身份驗證。身份提供者還負責確認系統中各實體上哪些服務可以被該用戶訪問。可按SAML標準提供身份驗證服務的實現有很多種,比如Salesforce就能充當身份提供者和這一角色,LDAP、RADIUS或活動目錄(AD)也可以。
SAML聲明是什么?
SAML聲明就是一份XML文檔,所有我們討論的信息都通過它在計算機間傳遞。一旦身份提供者確認你確實是所聲稱的用戶,且有權訪問你感興趣的內容或服務,它就會向實際提供這些服務的服務器發出SAML聲明。出于安全考慮,SAML聲明可被加密。
SAML身份驗證如何進行?
這看起來可能有點抽象,不妨看看下面這張SAML身份驗證事務處理的高級視圖。大多數情況下用戶代理都是Web瀏覽器。
假設你是SSO環境中的用戶,你正試圖訪問服務器上的某資源。所涉及的一系列事件如下:
1. 你試圖訪問服務器上的資源,也就是SAML術語中的服務提供者。該服務提供者查驗你是否是系統中經驗證過的用戶。如果你是,直接跳轉到步驟7;如果你不是,服務提供者開始身份驗證過程。
2. 服務提供者為你確定恰當的身份提供者,并將你重定向到該提供者——也就是SSO服務。
3. 你的瀏覽器向SSO服務發送身份驗證請求;該服務對你進行識別。
4. SSO服務返回一個XHTML文檔,在SAMLResponse參數中包含有服務提供者所需的身份驗證信息。
5. SAMLResponse參數被傳遞給服務提供者。
6. 服務提供者處理該響應,并為你創建安全上下文——基本上,就是讓你登錄進去,然后告訴你你請求的資源在哪里。
7. 有了該信息,你就可以再次請求你感興趣的資源了。
8. 該資源最終被返回給你!
你會注意到,該過程中很多步驟很抽象。比如說,SAML是怎么知道恰當的身份提供者的,或者身份提供者是如何確定你就是你所聲稱的用戶的,這些都沒有任何解釋。這不是什么疏漏:SAML標準并沒有定義確切的實現方法,給IT留有很多余地。
正如前文所述,有很多技術可供實際身份驗證過程所用;無論你選擇的是Salesforce、LDAP還是別的什么,SAML聲明都會將你經過驗證的信息在提供者間流轉。
如果你想了解更多有關SAML事務中消息傳遞的細節,你可以深入研究完整XML代碼,了解上述場景中從身份提供者傳遞給服務提供者的各種聲明。
SAML vs. OAuth:其間區別是什么?
OAuth(https://oauth.net/)是比SAML略新的標準,由谷歌和推特在2006年聯合開發。該標準被開發的部分原因,是為了補充SAML在移動平臺上的不足,且不是基于XML,而是基于JSON。
除了SAML不那么吸引人的移動支持,這二者之間的區別在哪里呢?如我們所見,SAML標準定義了提供者提供身份驗證和授權服務的方式。OAuth則不然,僅處理授權。
OpenID Connect(http://openid.net/connect/)是更新的標準,于2014年開發,提供身份驗證服務,處于OAuth上層。
另一個主要的不同,就是其用例。SAML理論上用于開放互聯網,實際上最常部署在企業內網,出于單點登錄目的。相比之下,OAuth則是谷歌和推特為了整個互聯網而設計的。