2010-05-14 50 views
82

SAML和使用OAuth聯合登錄有什麼區別?如果公司想要使用第三方Web應用程序,而且還希望單點登錄併成爲身份驗證授權,那麼哪種解決方案更有意義?SAML vs聯合使用OAuth登錄

回答

114

他們解決不同的問題。

SAML是一組已定義共享關於誰用戶是信息的標準,他有什麼屬性集是,給你一個方法來授予/拒絕訪問的東西,甚至要求認證。

OAuth更多關於委託訪問的內容。你基本上允許某人像你一樣「行動」。它最常用來授予訪問api的權限,可以代表您執行某些操作。

他們是兩個完全不同的東西。


一些可能有所幫助的例子。

OAuth想到一個推特。假設你使用Google Buzz和Twitter,並且你想寫一個應用程序來保持兩個同步。你基本上可以建立你的應用程序和twitter之間的信任。第一次將應用程序鏈接到twitter時,您會輸入經典提示登錄到twitter,然後彈出確認框並詢問「您想授予訪問«您的應用程序名稱»嗎?」一旦你點擊「是」,信任已經建立,現在你的應用可以在Twitter上扮演你的角色。它可以閱讀你的帖子,也可以製作新的帖子。

SAML - 對於SAML考慮兩種不相關的成員系統之間的某種「協議」。在我們的情況下,我們可以使用美國航空公司和赫茲。沒有共享的證書可以將您從一個網站帶到另一個網站,但可以說赫茲希望向美國航空公司提供「交易」。 (當然,我知道這是一個極端的例子,但與我一起)。購買航班後,他們將向其主席成員免費租用一輛汽車。美國航空公司和赫茲將建立某種形式的信任,並以某種方式識別用戶。在我們的案例中,我們的「聯合身份證」將是電子郵件地址,並且這將是赫茲相信美國航空公司身份提供商將提供準確且安全的令牌的一種單向信任集。在預訂航班後,美國航空公司的身份提供商將生成一個令牌並填充他們如何驗證用戶的身份,以及在我們的案例中關於該人的「屬性」,最重要的屬性將是他在美國航空公司的身份等級。一旦令牌被填充後,它會通過某種類型的引用傳遞給它,或者通過URL編碼,一旦我們到達Hertz,它會查看令牌,驗證令牌並且現在可以允許免費租賃汽車。

這個SAML例子的問題是它只是一個超出許多專用用例。 SAML是一個標準,可以實現它的方法有很多。


另外,如果你不介意那些授權護理,你幾乎可以認爲,通過SAML和OpenID斷言驗證。

+2

我仍然沒有得到區別。 「授予/拒絕訪問」和「授予訪問API」的聲音對我來說就像是一樣的。你能給出兩個更相似的例子,所以我可以看到差異嗎?例如。爲什麼我們不能使用SAML在你的應用和Twitter之間建立信任?或者你爲什麼不能用赫茲的OAuth來告訴美國航空公司這項特殊協議? – 2014-06-06 09:08:31

+1

我有種感覺,但我總是可以用OAuth做SSO(通過請求訪問提供標識的API)。這是否意味着OAuth可以完成SAML的所有功能? – dirk 2015-02-05 09:10:43

2

SAML有多種「配置文件」可供選擇,允許其他用戶「登錄」到您的網站。 SAML-P或SAML Passive非常普通,設置起來相當簡單。 WS-Trust類似,它也允許在各個網站之間進行聯合。

OAuth是爲授權而設計的。你可以在這裏閱讀更多:

What's the difference between OpenID and OAuth?

+0

我很難理解「登錄」和「授權」之間的區別。你能舉一個例子來說明不同之處嗎? – 2014-06-06 09:04:57

+0

@TimCooper「login」對於*身份驗證*是鬆散的術語,而「授權」是很好的授權...... [根據您的請求的示例](http://stackoverflow.com/questions/6556522/authentication-versus-authorization) – quickshiftin 2014-06-12 19:50:18

+1

@quickshiftin好的,我明白這個區別。您的答案似乎意味着SAML執行身份驗證,而OAuth執行身份驗證。那是對的嗎?或者他們兩者都做 - (在這種情況下,我仍然不知道有什麼不同)。 – 2014-06-14 11:49:16

1

他們處理一個微妙的使用情況

  • SAML - 用戶委託的應用 - 用戶的各種服務提供商(例如,網頁或Web服務)
  • 的OAuth的共享憑據(例如,SSO)訪問代表他/她的
32

看看this simple explanation總結如下資源:

許多人對SAML,OpenID 和OAuth之間的差異感到困惑,但它其實很簡單。雖然有一些 重疊,但這裏是區分 三者的一種非常簡單的方式。

的OpenID - 單點登錄,爲消費者

SAML - 單點登錄的企業用戶

的OAuth - 應用

對於人們熟悉面向對象的設計模式之間的API授權,我認爲包裝圖案有一個很好的必然結果。想想立面,修飾器代理模式。從根本上說,這些都是一樣的,他們只是包裝... 不同的是意圖的每個模式

同樣,SAML,OAuth的和OpenID所有有利於通過共同的基本機制,這是重定向到一些私人交互服務提供商/身份授權,然後重定向到發起第三方不同的意圖應用程序。

環顧網絡,你會發現協議的能力之間的重疊。 Authentication via OAuth是完全合理的。儘管SAML和OpenID專門針對聯合身份標識,但OAuth上的SSO可能沒有多大意義。

對於企業環境中的問題本身,SAML聽起來比OAuth更適合SSO。我敢打賭,如果你看看你想與你的公司身份集成的第三方應用程序,你會發現它們已經被設計爲與SAML/LDAP/Radius等整合。IMO OAuth更適合於互聯網互動在大型企業環境中的應用程序之間或者包含面向服務架構的應用程序之間。

授權規則也可以通過其他方式在公司環境中指定。 LDAP是一個常用的工具。將用戶組織到組中並將應用程序特權與組成員關聯是一種普遍的方法。 LDAP也可以用於身份驗證。Active Directory是一個很好的例子,但我更喜歡OpenLDAP。

+1

感謝您更新鏈接@Sundeep – quickshiftin 2014-11-20 21:16:50

+0

鏈接已停用 – Gobliins 2016-07-29 08:33:00

+0

鏈接已更新,但已在答案中的摘要是相同的。 – quickshiftin 2016-07-29 15:11:50

1

SAML用於驗證 - 主要用於單點登錄方案。 OAuth用於資源表示的授權。

JSON Web Token (JWT)是SAML XML令牌的替代方案。 JWT可以通過OAuth

使用一個很好的參考是SAML vs. OAuth: Which One Should I Use?

+0

http:// stackoverflow。COM /問題/ 27314076 /差之間,智威湯遜 - 和SAML – Lijo 2016-08-15 15:05:37