1. 程式人生 > >轉載 | 科普一下 SAML:安全宣告標記語言

轉載 | 科普一下 SAML:安全宣告標記語言

隨著網際網路的普及,物聯網的逼近,數字化時代的真正到來,身份認證與訪問授權的重要性越來越凸顯。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瀏覽器。

img

假設你是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

OAuth(https://oauth.net/)是比SAML略新的標準,由谷歌和推特在2006年聯合開發。該標準被開發的部分原因,是為了補充SAML在移動平臺上的不足,且不是基於XML,而是基於JSON。

img

除了SAML不那麼吸引人的移動支援,這二者之間的區別在哪裡呢?如我們所見,SAML標準定義了提供者提供身份驗證和授權服務的方式。OAuth則不然,僅處理授權。

OpenID Connect

OpenID Connect(http://openid.net/connect/)是更新的標準,於2014年開發,提供身份驗證服務,處於OAuth上層。

img

另一個主要的不同,就是其用例。SAML理論上用於開放網際網路,實際上最常部署在企業內網,出於單點登入目的。相比之下,OAuth則是谷歌和推特為了整個網際網路而設計的。

原文連結:https://www.aqniu.com/tools-tech/29359.html 作者:nana 星期六, 十一月 11, 2017

相關閱讀

什麼是 Authing?

Authing 提供專業的身份認證和授權服務。 我們為開發者和企業提供用以保證應用程式安全所需的認證模組,這讓開發人員無需成為安全專家。 你可以將任意平臺的應用接入到 Authing(無論是新開發的應用還是老應用都可以),同時你還可以自定義應用程式的登入方式(如:郵箱/密碼、簡訊/驗證碼、掃碼登入等)。 你可以根據你使用的技術,來選擇我們的 SDK 或呼叫相關 API 來接入你的應用。當用戶發起授權請求時,Authing 會幫助你認證他們的身份和返回必要的使用者資訊到你的應用中。

<div align=center>Authing 在應用互動中的位置</div>

歡迎關注 Authing 技術專欄