簡介
SSO是單點登錄的簡稱,常用的SSO的協議有兩種,分別是SAML和OAuth2。本文將會介紹兩種協議的不同之處,從而讓讀者對這兩種協議有更加深入的理解。
SAML
SAML的全稱是Security Assertion Markup Language, 是由OASIS制定的一套基於XML格式的開放標准,用在身份提供者(IdP)和服務提供者 (SP)之間交換身份驗證和授權數據。
SAML的一個非常重要的應用就是基於Web的單點登錄(SSO)。
在SAML協議中定義了三個角色,分別是principal:代表主體通常表示人類用戶。identity provider (IdP)身份提供者和service provider (SP)服務提供者。
IdP的作用就是進行身份認證,並且將用戶的認證信息和授權信息傳遞給服務提供者。
SP的作用就是進行用戶認證信息的驗證,並且授權用戶訪問指定的資源信息。
接下來,我們通過一個用SAML進行SSO認證的流程圖,來分析一下SAML是怎么工作的。
上圖中User Agent就是web瀏覽器,我們看一下如果用戶想請求Service Provider的資源的時候,SAML協議是怎么處理的。
- 用戶通過User Agent請求Service Provider,比如:
SP將會對該資源進行相應的安全檢查,如果發現已經有一個有效的安全上下文的話,SP將會跳過2-7步,直接進入第8步。
- 如果在第一步的時候,SP並沒有找到相應的有效安全上下文的話,則會生成對應的SAMLRequest,並將User Agent重定向到IdP:
RelayState是SP維護的一個狀態信息,主要用來防止CSRF攻擊。
其中這個SAMLRequest是用Base64編碼的,下面是一個samlp:AuthnRequest的例子:
為了安全起見,SAMLRequest還可以使用SP提供的簽名key來進行簽名。
- User agent將會發送一個get請求到IdP的SSO server :
IdP收到這個AuthnRequest請求之后,將會進行安全驗證,如果是合法的AuthnRequest,那么將會展示登錄界面。
- 用戶可以輸入用戶名密碼進行登錄。登錄成功之后,IdP將會返回一個XHTML form:
這個form中包含了SAMLResponse信息,SAMLResponse中包含了用戶相關的信息。
同樣的SAMLResponse也是使用Base64進行編碼過的。