2020/12/08

【技術乾貨】基於SAML(安全斷言標記語言)的SSO單點登錄(Single Sign On)介紹

 

【技術乾貨】基於SAML(安全斷言標記語言)SSO單點登錄(Single Sign On)介紹

一、背景知識:

SAML即安全斷言標記語言,英文全稱是Security Assertion Markup Language。它是一個基於XML的標准,用於在不同的安全域(security domain)之間交換認證和授權數據。在SAML標准定義了身份提供者(identity provider)和服務提供者(service provider),這兩者構成了前面所說的不同的安全域。 SAMLOASIS組織安全服務技術委員會(Security Services Technical Committee)的產品。

SAMLSecurity Assertion Markup Language)是一個XML框架,也就是一組協議,可以用來傳輸安全聲明。比如,兩台遠程機器之間要通訊,為了保證安全,我們可以採用加密等措施,也可以採用SAML來傳輸,傳輸的數據以XML形式,符合SAML規範,這樣我們就可以不要求兩台機器採用什麼樣的系統,只要求能理解SAML規範即可,顯然比傳統的方式更好。SAML 規範是一組Schema 定義。

可以這麼說,在Web Service 領域,schema就是規範,在Java領域,API就是規範。

 

二、SAML(安全斷言標記語言)的作用

SAML 主要包括三個方面:

1.認證申明。表明用戶是否已經認證,通常用於單點登錄。

2.屬性申明。表明 某個Subject 的屬性。

3.授權申明。表明 某個資源的權限。

 

三、SAML (安全斷言標記語言)框架

SAML就是客戶向服務器發送SAML 請求,然後服務器返回SAML響應。數據的傳輸以符合SAML規範的XML格式表示。SAML 可以建立在SOAP上傳輸,也可以建立在其他協議上傳輸。

因為SAML的規範由幾個部分構成:SAML AssertionSAML PrototolSAML binding

 

1.    安全

由於SAML在兩個擁有共用用戶的站點間建立了信任關系,所以安全性是需考慮的一個非常重要的因素。SAML中的安全弱點可能危及用戶在目標站點的個人信息。SAML依靠一批制定完善的安全標准,包括SSLX.509,來保護SAML源站點和目標站點之間通信的安全。源站點和目標站點之間的所有通信都經過了加密。為確保參與SAML交互的雙方站點都能驗證對方的身份,還使用了證書。

 

2. 應用

目前SAML已經在很多商業/開源產品得到應用推廣,主要有:

IBM Tivoli Access Manager

Weblogic

Oblix NetPoint

SunONE Identity Server

Baltimore, SelectAccess

Entegrity Solutions AssureAccess

Internet2 OpenSAML

Yale CAS 3

Netegrity SiteMinder

Sigaba Secure Messaging Solutions

RSA Security ClearTrust

VeriSign Trust Integration Toolkit

Entrust GetAccess 7

 

四、基於 SAMLWeb SSO

 

SAML Web 瀏覽器單一登入 (SSO)」可讓 Web 應用程式將使用者鑑別委派給 SAML 身分提供者,而非所配置的使用者登錄。

 

「安全主張標記語言 (SAML)」是一項 OASIS 開放式標準,用來代表和交換使用者身分、鑑別和屬性資訊。SAML 主張是一個採 XML 格式的記號,在完成單一登入要求的過程中,用來將使用者身分和屬性資訊,從使用者的身分提供者傳送到授信服務提供者。SAML 主張提供無關於供應商的方法,藉以在聯合商業夥伴之間傳送資訊。利用 SAML,企業服務提供者可以聯絡獨立的企業身分提供者,以便對嘗試存取安全內容的使用者進行鑑別。

 

WebSphere® Application Server Liberty 支援 SAML Web 瀏覽器單一登入設定檔與 HTTP POST 連結,並擔任 SAML 服務提供者。Web 使用者接受 SAML 身分提供者的鑑別,SAML 身分提供者產生一項 SAML 主張,WebSphere SAML 服務提供者使用該 SAML 主張,為該 Web 使用者建立安全環境定義。

 

SAML Web SSO 流程包括三個動作者:一般使用者、身分提供者 (IdP) 和服務提供者 (SP)。使用者一律接受 IdP 的鑑別,SP 依靠 IdP 主張來識別使用者。

 

 


1. Web 單一登入中的主要概念

在上圖中:

(1) 使用者向服務提供者 (SP) 要求服務。

(2) SP 透過重新導向,來向身分提供者 (IdP) 要求使用者身分 (SAML)

(3) 如果該使用者尚未鑑別,則 IdP 會要求該使用者登入。

(4) SP 取得 SAML

(5) SP 根據 SAML 主張來制定存取控制決策。

 

五、Liberty SAML Web 瀏覽器 SSO 實務

下面簡單介紹使用基於SAMLSSO登錄到WebApp1的過程(下圖源自SAML WebSphere® Application Server Liberty

實務 1:由 SP 起始的請求 Web SSO(一般使用者從 SP 開始)

 


(1) 一般使用者造訪 SP

(2) SP 將使用者重新導向至 IdP

(3) 一般使用者接受 IdP 的鑑別。

(4) IdP 傳送 SAML 回應和主張給 SP

(5) SP 驗證 SAML 回應,並授權使用者要求。

 

實務 2:由 IdP 起始的自發性 Web SSO(一般使用者從 IdP 開始)

 


(1) 使用者代理程式存取 SAML IdP

(2) IdP 鑑別使用者,並發出 SAML 主張。

(3) IdP 使用 SAMLResponse 將使用者重新導向至 SP

(4) SP 驗證 SAML 回應,並授權使用者的要求。

 

實務 3OpenID Connect 提供者與 SAML 服務提供者

 


(1)一般使用者造訪 OpenID Connect 依賴方 (RP)

(2) RP 將一般使用者重新導向至 OpenID Connect 提供者 (OP)

(3) OP(亦為 SAML SP)將一般使用者重新導向至 SAML IdP

(4)一般使用者接受 SAML IdP 的鑑別。

(5) IdP 使用 SAMLResponse 將一般使用者重新導向至 OP SP

(6) OP/SP 驗證 SAML,並將授權碼傳送給 RP

(7) RP 交換 id_token access_token 的程式碼。

(8) RP 驗證 id_token,並授權一般使用者。

 

沒有留言:

張貼留言