2012-07-10 178 views
12

我們有兩個獨立的產品,包括Web應用程序和服務器。如何使用SAML和Shibboleth實現或集成單點登錄

我們希望爲他們實現單一登錄,因此當用戶登錄到一個產品時,他可以自動訪問屬於他的其他產品中的資源。

我已經探索了一點,發現SAML是一種很好的方法,但我們不確定我們想如何繼續。

實施我們自己的服務提供商是一個好主意嗎?我曾看過Shib SP,但看起來好像我想將其整合到我的產品中,它也不會那麼容易。

所以我只是從以前遇到類似問題的人那裏尋找一些建議。

另一個問題是,如果我需要使用OpenSaml實現SP,我可以學習哪些資源?看起來好像沒有很多我可以參考的教程或例子。

如果有人能指出我自己的SP需要包含的一些大的程序或組件,我也會非常感激。

編輯1:

只是儘量提供關於我想要的更多細節。我們有兩個獨立的產品。目前我們能夠外部化用戶數據庫。例如,我們的產品可以被配置爲連接到LDAP服務器或任何其他外部用戶數據庫,只要他們正確地實施服務。

現在我們的目標是我們希望爲我們的兩種產品提供SSO。一種情況是我們在兩種產品中都有我們自己的SP組件(或者實現或集成)。客戶可能擁有自己的IdP。通過一些配置,我們的SP可以連接到他們的IdP,並從那裏進行身份驗證,用戶無需登錄兩次即可訪問這兩種產品。因爲,如果客戶沒有,我們可以提供一個開箱即用的IdP。

回答

13

與Shibboleth的最大的困難是,它是有效的,在SAML V2.0規範的參考實現。

但是,對於大多數例程安裝,實際上只需要很少的SAML規範就可以爲SSO啓用幾個Web應用程序。

但是由於Shibboleth實現了所有功能的全部功能,它可能是一個熊配置。

我們做了與Shibboleth的項目(這是無可否認的上邊緣用例),對我來說,在當時是一個SAML新手來說,這真是一件苦差事得到的一切行動和工作。

對於我們的下一個刺,我通過Web Profile查看了用於SSO的SAML spec。如果你閱讀它,這對於這個有限的用例來說確實很簡單。我們決定不再使用Shibboleth,而是使用OpenSAML庫編寫我們自己的IdP和SP。

我們能讓Shibboleth工作得更快嗎?大概。但我不認爲我們會理解我們自己做的事情。有一點不是發明的 - 在這裏,當然,但是當你理解軟件和詞彙的時候,這些東西已經足夠讓人困惑了,而當你不瞭解時,這些東西已經足夠讓人困惑了。 SAML充滿了新詞彙。

您也可以考慮使用SimpleSAML作爲IdP併爲您的Web應用程序編寫自己的SP。 SimpleSAML使用PHP,但它更友好一些。你可以把它當作一個自包含的apache服務。

我會說,我們的SP重約1000行javadoc'd代碼,但它主要是連接OpenSAML的東西和一些實用的東西。事實並非如此可怕。儘可能準備真正喜歡閱讀已簽名的XML blob。

這是令人沮喪,這真的不是簡單的,但它的有關收養等有點雞/蛋事情

而且如果這些方法都適合你,你可以看看的OAuth2和它的一些配置文件。

+0

當我嘗試使用Shib SP和IdP設置演示時,我的感受與您完全一樣。它太強大而且靈活。我花了很多時間閱讀他們的wiki和谷歌其他相關資源。我們需要了解許多新詞彙。非常感謝您的帖子。這讓我更勇敢嘗試實施我們自己的SP。你可以與我分享一些你在編寫自己的SP代碼時提到的資源或例子嗎?我在互聯網上看不到很多。 – performanceuser 2012-07-10 23:09:03

+0

我搜索了一下,發現http://code.google.com/p/websso/。我沒有使用這個,但作爲第一次切割它看起來不錯。它有方程的SP和IdP兩邊。 svn結帳是...大。我還發現http://www.capcourse.com/Library/OpenSAML/index.html,但他的代碼沒有(明顯的)許可證,所以我沒有仔細觀察它。但它具有通用的SAML示例,如果遇到困難,您可能會看到這些示例。 – 2012-07-11 03:59:19

+0

非常感謝。我會看看這些例子。 – performanceuser 2012-07-11 07:38:11

3

如果你只想在兩種產品之間實現SSO,我想是的,從零開始構建一些東西比較容易。如果它是Java,Shibboleth的OpenSaml是一個非常好的庫。

當你開始實施更多的東西和一些複雜的場景時,去做已經建好的東西是最好的選擇。你還應該知道你可能在每個系統基礎上編寫的幾個東西(例如斷言生成,xml-dsig,驗證等)。

一眼就可以看出,已建成的產品看起來太複雜或難以擴展或適應您的特定需求。但是當您想要爆炸所有SAML功能時,您的開發人員可以爲連接器和實現開發工作提供獎勵。

儘管如果你能更詳細地解釋你想達到什麼,這將是非常有用的;我覺得你的問題是相當開放...

+0

謝謝。我已更新了我的原始帖子。我同意這個問題是開放的。我盡力提供儘可能多的細節。 – performanceuser 2012-07-10 22:56:45

+0

@performanceuser給出了你的更新,如果它沒有超出這個範圍,我建議編寫一個簡單的SAML斷言消費端點來完成所有的邏輯,並要求你的客戶在那裏發佈信息,以便在你身邊登錄。你仍然需要注意一些東西(即註銷,安全),但是我認爲編寫它的時間和知道約束的時間要少於你理解完整的世博產品所需的時間。 – 2012-07-10 23:36:03

+0

謝謝。我會盡力實施一個。你可以與我分享一些使用openSAML實現SP的資源或例子嗎?我在互聯網上看不到很多。 – performanceuser 2012-07-11 00:37:15

0

我沒有Shibboleth服務提供商的個人經驗,但我目前正在開發使用Shibboleth IdP,Shibboleth發現服務和Guanxi Service Provider的架構。將Guanxi服務提供商的輕量級Guard模塊與Java webapp集成是一塊蛋糕,您無需編寫自己的模塊即可輕鬆獲得基於Shibboleth的架構。有關設立關西SP的localhost tutorial,只是略過關西WAYF和IdP的部分,並使用Shibboleth組件代替它們。

+0

感謝您的信息。這是我第一次聽說關西。你知道它是免費的嗎? – performanceuser 2012-07-12 16:42:50

+0

[1]:https://github.com/guanxi/guanxi-sp-engine/blob/master/README [2]:https://github.com/guanxi/guanxi-sp-guard/blob/主/自述 – Erwin 2012-07-16 11:20:01