SAML 是如何實現 Single Sign-On 的單一登入服務?

Single Sign-On(單一登入)與 Zero Trust Networks(零信任網路)這兩種服務都是以安全為基礎,在使用者、身份驗證的供應商及提供服務的供應商,在這三者之間來回傳遞資訊,而 SAML 正式實現此行為的一種交換標準。

不要相信任何人

就像電影《諜影行動(Tinker, Tailor, Soldier)》裡,由 Gary Oldman 飾演的 George Smiley 一樣,你不應該輕易相信任何人,甚至你要對每個人都抱持著懷疑的態度。這是因為,儘管那個「某人」已經通過驗證,而且也已經在你的網路領域裡自由穿梭,但這也並不代表說你就不需要再對那個「某人」進行驗證,因為他很有可能不是他們所聲稱的那個人、只是假冒的,如果是這樣的話,他們就不應該被信任,何況是對於機密的資料,都必須要更嚴格的驗證其身份,而現在科技所發展出的安全防護模型,並不是在外面設置一道又一道的防火牆,而是透過「身份驗證」。

零信任網路(Zero trust network)就是其中一種驗證技術,他強制要求想要通過你網路領域、使用應用程式、或存取服務的人,都必須要接受身份驗證,當然,沒有人會想要一直重複的輸入帳號密碼或輸入驗證碼,不僅繁瑣,也會大幅降低使用者體驗,因此,自動化驗證會是最好的方式。

一旦使用者在第一次被成功辨識之後,並且也確定他正是他所說的人(有可能是藉著他人從未使用的 IP 位址來隱藏自己的身份),如此一來,自動化驗證並傳遞身份資訊才有意義。

若要安全地做到這一點,就必須使用一個標準來規範,確保這些憑證是透過正確的方式在傳遞、接收,然後驗證,而這個規範正是 SAML(Security Assertion Markup Language,安全斷言標記式語言),目前版本是 2.0。

什麼是 SAML?

SSO(Single Sign-On)是一種以雲端為基礎、可以用來驗證身份的服務,它幫助想要使用各個平台的使用者,只要透過一組帳號密碼,就可以存取所有的服務,而不用在每次需要的時候都要輸入帳號密碼。當使用者想要登入的時候,伺服器就會先確認使用者的身份資訊、憑證、以及權杖等,以驗證使用者的身份。而零信任網路(Zero trust network)一般也是透過 SSO 來對使用者進行驗證,以允許使用者存取外部網路。

SAML 這項技術很快地就獲得了廣大的支持,像是 Google、Microsoft、IBM、Red Hat、Oracle等等,還有那些很多以雲端為基礎的服務供應商,他們都為 SAML 提供了很多建議、解決方案,並且去實踐它、提倡它。使用 SAML,不論是企業或是組織,都可以很安全地向服務供應商傳遞使用者的身份資訊、並給予存取權限等。

SAML 如何運作?

在 SAML 的規範中主要定義了三個角色,分別是:

  • 終端使用者(End-User):想要遠端來取得資源或是雲端服務的人。
  • 身份驗證的供應商((IdP,Identity Provider):透過網路來提供線上的資源,並為終端使用者提供身份驗證的服務。
  • 提供服務的供應商(SP,Service Provider):必須完全信賴身份驗證供應商,已由身份驗證的供應商驗證過身份的使用者,可以擁有服務供應商所提供的各項服務的存取權限。

當使用者使用他們的公司帳號登入,想要存取服務的資源時,這個時候 IdP 就會對使用者進行身份驗證,IdP 同時也會向 SP 告知即將有使用者會使用他們的服務,當最後驗證成功之後,IdP 就會向 SP 提供使用者的身份資訊,SP 也必須給予使用者存取的權限。

當使用者向 SP 發出驗證的請求,然而 SP 卻沒有驗證的話,那麼 SP 就會將使用者重新導向至 IdP,來幫助使用者建立他們的身份,接著 IdP 又會再次告知 SP 即將有使用者要使用該服務,當身份驗證成功之後,使用者也將會被重新導向至 SP,以存取 SP 的服務。

IdP(身份驗證供應商)是整個過程的中繼站,沒有他們,系統就無法運作,因此有些組織為此而開始提供身份驗證服務,透過 SAML 進而吸引客戶一起合作。

SAML 的三個主張

SAML「主張(Assertions)」就是 IdP 傳送給 SP 的一份 XML 文件,所有我們討論的資訊都通過它在電腦之間傳遞,當身份提供者確認你與你所聲稱的使用者相符,並且想要存取應用程式或服務,那麼它就會向服務提供者傳遞 SAML 的聲明(或主張),在它包含了使用者的授權狀態,分別有三種類型:

  • 驗證主張是驗證使用者的身份,他們提供了一些與使用者相關的「訊息(Metadata)」,比如說使用者的登入時間以及他們所使用的驗證方法(密碼、兩階段驗證等)。
  • 主張身份訊息是由身份驗證供應商將有關使用者的特定片段數據或資訊提供給服務供應商。
  • 授權決策主張包含了 IdP 的決策,不論它是否成功驗證了使用者的身份,授權決策主張與驗證主張不同的是,驗證主張表明 IdP 知道該使用者是誰,但授權決策主張則是指 IdP 知道該使用者是否具有存取應用程式或服務的權限。

OAuth 與 WS-FED?

SAML 最常被企業組織用來登入外部的付費服務,第一是因為安全性,另外它只需要一組帳號密碼就可以存取所有服務,這對企業來說非常方便。在這講求時間寶貴的世代,SAML 的技術可以節省許多不必要的時間,這在未來勢必是一個趨勢,越來越多服務供應商的參與,比如說 Salesforce、Go Daddy、Dropbox、Nokia 等,甚至政府機構或民間組織,也都開始使用 SAML。

OAuth(開放授權),是一個開放性的標準、一個公開發表的標準協定,根據維基百科裡的 OAuth 所述,有支援 OAuth 的平台,允許使用者透過在其他應用程式或服務端上的個人資訊,以存取現在想要取得的資源,如此一來,就不需要再另外註冊帳號及密碼,也就是所謂的連動登入,主要的應用在使用者與應用程式或服務方面。常見的比如說,「使用 Google 帳號登入」、「使用 Facebook 帳號登入」等等。

實際上,當你「使用 Google 或 Facebook 來登入」的這個行為,就是 IdP(Identity Provider,身份驗證供應商)在做的事,因為藉由那些受信任的平台(Google 或 Facebook)來擔保、驗證你的身份,它不需要知道你在 Google 或 Facebook 平台上的密碼,它只是提供一個憑證來讓你使用這個服務,即便該服務遭到駭客入侵,上面的使用者資料全部外洩,然而你的個人資料卻不會有任何危險。

WF-FED(Web Services Federation,網路服務聯合身份驗證)也是在做跟 SAML 一樣的事,它將聯合身份驗證與授權從提供服務的供應商那裡傳送至受信任的身份驗證供應商,然而他的使用率還是不及 SAML,儘管有 Microsoft 的 Active Directory Federation Services(ADFS)的支持,但在雲端服務供應商方面,並沒有獲得太多青睞。

整體來說,SAML 有助於使用聯合身份驗證來實現 SSO(Single Sign-On,單一登入),零信任網路亦同,這就像是一個士兵對著衛兵說:「上校馬上就會來帶我進去了。」

原文連結:https://www.cloudsavvyit.com/14654/how-the-saml-standard-provides-single-sign-on-services/
參考資料:
https://www.oracle.com/tw/security/cloud-security/what-is-saml/
https://zh.wikipedia.org/wiki/%E5%AE%89%E5%85%A8%E6%96%AD%E8%A8%80%E6%A0%87%E8%AE%B0%E8%AF%AD%E8%A8%80
https://zh.wikipedia.org/wiki/%E5%BC%80%E6%94%BE%E6%8E%88%E6%9D%83