2010-02-14 113 views
4

它沒有顯式跨域我正在尋找的會話,但它是解釋它是我想要的最簡單的方法。跨域單一選擇登錄

我有創建網站的系統。 網站託管在很多不同的服務器上。

用戶可以創建自己的帳戶,然後他們可以創造大量的網站。 他們可以創建

www.mysite.com subdomain.mysite.com 並創建大量不同的網站。

有些時候,網站會從彼此完全不同的,但有些時候,網站會在事實上被如此緊密的聯繫,他們也許應該被認爲是相同的網站。

例如: (不同的結構域完全) mysite-news.com mysite-blog.com 或(同域,不同的子域) news.mysite.com blog.mysite.com

我需要的是爲用戶提供他們想要的方式,創建一個排序聯邦,允許通過點擊複選框允許他們允許跨站點登錄。我不能更改配置,除非它是永久性的更改,並且不會影響其他網站,因爲有1000個網站會受到影響。

你認爲什麼是支持這一點的最好方法是什麼? OpenID,SSO?

我需要的東西,這是簡單的網站創建一個「聯盟」,然後讓他們的標誌插件是跨域。如果有人想加入,那麼他們可以。

回答

12

的OpenID提供了一些不錯的功能,但不幸的是,你要尋找的跨域行爲不是東西,你會在一個標準的OpenID的實現找到。 OpenID的主要設計原則之一是,未經用戶明確同意,提供商不公開任何關於用戶的信息,因此任何有信譽的OpenID提供商都不會告訴mysite-news.com您已經登錄到mysite-blog .com而不要求用戶批准。

[技術上來說,這裏發生的事情是,mysite-news.com和mysite-blog.com在概念上處於同一安全「領域」,但OpenID通過URL模式識別領域,並且由於它們是在不同的領域,他們不匹配。]

而這並沒有給你你想要的用戶體驗。有一些以前的答案是做概述了一種系統的很好的工作,你需要在這裏:

總之,你會設定某種形式的身份驗證服務在login.mysite.com上回答來自mysite-news.com和mysite-blog.com的查詢。在這方面你還有幾種方法可以利用OpenID。

  1. 這裏描述的redirect-to-login-and-return-a-signed-token流程正是OpenID所做的。因此,您仍然可以使用OpenID實施來完成所有管理已簽名令牌和重播保護的工作,您的客戶站點只需跳過OpenID的初始「發現」部分,並始終將用戶重定向到login.mysite.com提供程序。而且,login.mysite.com可以跳過「我信任mysite-blog.com」的步驟,因爲它是一個特殊用途的提供商,它可以擁有自己的白名單,並且始終可以使用它。 OpenID將純粹在幕後,用戶永遠不會知道OpenID在某種程度上涉及到了。

  2. login.mysite.com可以反過來使用OpenID來要求用戶對其OpenID提供者(無論是Google還是雅虎還是像myOpenID這樣的專家)進行身份驗證。從那裏它看起來像一個標準的OpenID登錄,你會得到所有的好處,缺點是你的登錄重定向鏈獲得更長的時間(並相應地更慢)。他們的休息。

祝你好運。這是一個相當頻繁出現的問題,我還沒有找到一個非常好的參考實現,我可以指出人們,所以如果您發現有好的東西,請回來告訴我們。

最後,obligatory link to Matasano Chargen's screenplay on the subject

[*]近期谷歌的Buzz的慘敗是當你大吃一驚關於誰是自己的信息被共享的用戶會發生什麼一個很好的提醒。

+1

感謝您的深入解答。這非常有幫助。 – Layke 2010-02-19 20:39:54

2

正如你提到的,無論是OpenID的或SSO將是合適的。

參見29我的帖子12:50 2008年7月,http://groups.google.co.uk/group/comp.lang.php/browse_thread/thread/b682ed2a8b7fbb3f/f5f27f120e264fa0?hl=en&lnk=gst&q=single+sign+on+symcbean#f5f27f120e264fa0

對於如何實現SSO的例子。

C.

+0

謝謝。 我想我更喜歡OpenID的實現。 我打算增加支持Facebook連接也..所以用戶可以登錄以及。 這應該不是問題吧。 – Layke 2010-02-15 11:34:49

2

由於@keturn解釋,OpenID的不允許隱含信任沒有欺騙系統,這就是爲什麼我不會推薦它爲這個特定的問題。相反,我可以看看Shibboleth--一個用於分散架構的單點登錄。

假設網站master.example.com鏈接到網站child.example.com,使master.example.com提供登錄功能爲child.example.com。在master.example.com與註冊登錄的用戶現在想訪問資源http://child.example.com/resource,這是會員制。現在,Shiboleth踢進:

  1. 身份驗證:用戶是否有安全令牌?
    1. 如果用戶已經從master.example.com安全令牌,它進行有效性檢查和處理在步驟2
    2. 繼續。如果用戶沒有有效的標記,他被轉發到登錄網站,例如http://master.example。com/login。登錄後,用戶被轉發到步驟1。
  2. 授權(可選):通過提供附加信息master.example.com可以允許或不允許上child.example.com訪問特定資源(例如,在child.example.com特定的論壇是隻給高級會員訪問master.example.com。用戶的成員身份的信息僅可見master.example.com,所以他必須允許或拒絕訪問)。

Shibboleth實現是可以用象apache2許多服務或像在PHP(例如SimpleSAML)應用水平。

3

SSO僅僅是一個概念/狀態......這是你正在努力實現的目標。

OpenID適用於身份驗證,適用於多個站點的身份驗證。它不會將認證信息從一個站點傳送到另一個站點。

什麼似乎是行業標準SSO技術IMO是oAuth。它被Facebook,Twitter,Google等使用...

谷歌已經實施了OpenID和oAuth的混合協議,他們試圖推動它作爲標準的認證方法。 Google提供的聯邦登錄解決方案几乎與您所提到的完全一樣。

根據我對你剛剛提到的內容的解釋,你有一個解決方案,用戶可以在他們的設置中選中一個框,以便在他們的賬戶被支持的任何地方登錄......這違背了兩個原則oAuth和OpenID。我不知道現在的解決方案實際上是否值得。

基本上,現在做的不是通過OpenID提供的單個登錄來單獨連接到每個站點。您使用OpenID帳戶登錄到站點,您將重定向到oAuth授權請求。這將允許oAuth服務器將來在該站點上對您進行身份驗證,直到您的權限被撤銷,只要您使用該oAuth服務對您的OpenID帳戶進行身份驗證即可。