2012-05-13 23 views
1

我想我們有一個管理應用程序中實現單點登錄(SSO),但我想有一些線索了。在我們當前的應用程序中,客戶端使用典型的用戶+密碼組合(使用CAPTCHA作爲可選功能)登錄我們的應用程序。數據庫檢查(對於憑據)使用單一登錄(sso)的Web應用程序,提示?

據我瞭解(如果我正確地做了它),你SSO做的是「信任」身份提供者(即......谷歌,Facebook,雅虎的Windows Live等),所以客戶端正在外部頁面中執行實際的登錄,然後它向我返回一個值,所以我知道客戶端已被身份提供者驗證。

在我的眼裏,我願做這樣的事情(zwibbler FTW!):

the intended authentication mechanism

但在我們目前的應用中,我們檢查用戶名和他/她對我們的數據庫密碼,這就是我對SSO的理解失敗的原因......我如何將身份提供商返回的信息與我的用戶數據進行匹配?

或者更好的表現...哪些字段(如「典型」阿拉用戶,傳遞,電子郵件等),我可以在我的用戶帳戶數據使用相匹配的外部認證?我關心的是這是一個商業應用程序,所以我想讓用戶能夠使用他們自己的登錄數據,但我必須以某種方式與我們的數據匹配以讓他(她)/她登錄,所以... 我該怎麼做?

回答

2

作爲一般的設計,你將有以下表

  • 用戶
  • 角色
  • auth_OpenID
  • auth_Google
  • auth_Facebook
  • auth_Windows_Live

(將任何共享相同結構的auth表放入單個表中)。

用戶表將確定您的系統上的所有賬戶。角色表將標識您需要處理的所有權限集。然後,auth_ *表將包含遠程登錄所需的信息(例如Google帳戶ID和身份驗證令牌)。

然後,您有用戶表和其他各表之間的許多一對多的關係。

如果有人使用未知的第三方身份驗證系統登錄,則會提示他們將其鏈接到現有帳戶(在這種情況下,他們必須使用一組可識別的憑據重新登錄)或創建一個新帳戶。

0

如果您使用電子郵件地址作爲用戶名就可以匹配方式。不過,您可能仍然需要構建一個系統,以便經過身份驗證的用戶可以將其用戶帳戶與其他身份驗證提供程序相關聯(雖然仍然已登錄)。 如果你這樣做,這種關係將是隱含的。

2

您有幾種選擇:

  • 推出自己的解決方案(不好玩)。
  • 使用類似HybridAuth的解決方案。您需要一些額外的字段或額外的表格來將每個提供者+ ID映射到本地用戶ID。
  • 改變戰術稍微讓一個完全獨立的系統管理和你的星座權限分配(即標籤),如:Single Sign-On Server/Client

我相當部分的最後辦法。特別是如果你有多個不同的登錄系統需要相互交談或者你甚至預見到了這種需求。

相關問題