2010-04-08 43 views
9

我已閱讀其他問題,他們主要討論這樣做的安全性。這不完全是我的擔心,主要是因爲網站的問題是基於瀏覽器的遊戲。然而,更大的問題是用戶 - 並不是每個用戶都足夠了解OpenID。當然,RPX使得這非常簡單,這就是我將要使用的,但是如果用戶在Google或Facebook等賬戶中沒有賬戶,或者不相信系統使用現有賬戶登錄會怎樣?他們必須得到另一個提供的帳戶 - 我相信大多數人都知道如何這樣做,更不用說打擾了。使用OpenID作爲唯一的身份驗證方法

還有如何在應用程序中管理它的問題。用戶可能希望將多個身份用於單個帳戶,因此它不像用戶名+密碼那樣簡單。如何將用戶的OpenID標識存儲在數據庫中?使用OpenID也給我帶來了好處:RPX可以提供廣泛的配置文件信息,因此我可以預先填寫配置文件表單並要求用戶根據需要進行編輯。

目前,我有這樣的:

Users: 
------ 

ID  Email    Etc. 
--  --------------- ---- 
0  [email protected]  ... 
1  [email protected] ... 

UserOpenIDs: 
------------ 

ID  UserID  OpenID 
--  ------  ------ 
0  0   0 
1  0   2 
2  1   1 

OpenIDs: 
-------- 

ID  Provider Identifier 
--  -------- ---------------- 
0  Yahoo  https:\\me.yahoo.com\bob#d36bd 
1  Yahoo  https:\\me.yahoo.com\alice#c19fd 
2  Yahoo  https:\\me.yahoo.com\bigbobby#x75af 

有了這些外鍵:

UserOpenIDs.UserID -> Users.ID 
UserOpenIDs.OpenID -> OpenIDs.ID 

是不是正確的方式OpenID的標識符存儲在數據庫中?我如何匹配標識符RPX給我一個在數據庫中登錄用戶(如果標識符是已知的)。

因此,這裏有具體的問題:

  • 我將如何使它訪問沒有一個OpenID用戶或不想使用它? (安全問題比如說,以他們的Google帳戶登錄爲例)
  • 如何將標識符存儲在數據庫中? (我不確定上述表格是否正確)
  • 我需要採取哪些措施來防止某人以其他用戶的身份登錄並愉快地使用其帳戶進行操作? (據我所知,RPX通過HTTP發送標識符,所以任何人需要做的只是以某種方式抓住它,然後將其輸入到「OpenID」字段中)
  • 使用OpenID時還需要注意什麼?
+0

嘿那裏,新的OpenId我自己,但考慮它在我自己的網站。到你的第三個問題「措施......以防止某人以另一個用戶身份登錄......」,正如我所瞭解的OpenId,你從不**接受來自不可信來源的OpenId網址。在實施過程中,您的網站承載提供商的登錄信息,提供商的網站直接與您聯繫**,因此您始終接受來自受信任網站的OpenId網址。 – 2010-04-08 17:42:23

回答

4

使其成爲訪問

沒有一個OpenID首先涉及的用戶,你可以做一個小網頁,其中介紹瞭如何創建一個帳戶(或者甚至指向一些供應商)。這樣,創建一個OpenID帳戶並不比普通帳戶更難。

對於不想使用OpenID的用戶,您有兩種選擇。 第一種:在您的OpenID登錄旁邊實現舊式登錄,並讓用戶選擇他們想要的方法。 第二個是隻有OpenID ...這簡化了你的工作。 說有些用戶更信任網站不是一個值得信賴的OpenID提供商登錄,在我看來是很奇怪,因爲OpenID提供經常使用加密連接,等等

在數據庫中存儲

建議的模式約翰尼克是你所需要的。 (我不知道爲什麼你存儲的網址,而不是反斜槓反斜槓的)

您可能需要在使用前一定要規範你的URL這樣就可以避免像http://openid.test.com/abchttp://openid.test.com/abc/事情,不同的URL被處理。

額外措施採取

無。 您應該只使用http://openid.net/developers/libraries的圖書館。

確認用戶的身份是提供者的問題。 只有用戶和網站知道該帳戶的密碼。

如果有人有你的OpenID URL (這是公開的),他仍然需要密碼(或另一種鑑定方法,如SSL證書)才能登錄。

+0

我使用了反斜槓,因爲這是RPX通過他們的API給我的。只要它一致就沒有關係。至於圖書館,我將使用RPX,它具有一致的API和一個不錯的用戶界面。 – CMircea 2010-04-19 18:13:57

+0

謝謝,我只是想知道爲什麼和如你所說的問題是有一致的事情。 – Kru 2010-04-19 22:05:33

-1

我注意到一個回答第一個問題:

如果用戶不能或不想使用OpenID的,合作伙伴與現有的供應商,直接在網站上報名參加他們,或成爲提供者自己(儘管這意味着擁有經典的用戶名和密碼帳戶,並且缺少問題點 - >僅使用OpenID)。

3

Arg,回答以上我以前的評論。

對於第三個問題「措施......以防止某人以其他用戶身份登錄......」,據我瞭解OpenId,您從未接受來自不可信來源的OpenId網址。在實施過程中,您的網站託管供應商的登錄信息,供應商的網站直接與您聯繫,所以您始終接受來自受信任站點的OpenId Url。

換句話說,即使惡意用戶收集像寵物小精靈一樣的OpenId,他們也無法訪問您的系統。

對於第二個問題「我該如何存儲...」,您的模式將起作用,儘管它看起來有點放鬆。例如,通過使用多對多映射[即UserID to OpenID],您允許用戶屬於多個OpenId,並且一個OpenId屬於多個用戶。你想要沒有後者的前者。

一個簡單的外鍵約束就足夠了。

UserID  Email   
------  --------------- 
86000  [email protected] 
86001  [email protected] 

UserID  Identifier 
------  ---------------- 
86000  https:\\me.yahoo.com\bob#d36bd 
86000  https:\\me.yahoo.com\bigbobby#x75af 
86001  https:\\me.yahoo.com\alice#c19fd 

提供UserID是一個外鍵Users表上有Identifier唯一鍵約束,這實質上指明瞭User擁有零或許多獨特Identifier秒。原則上,我可能會在該桌上打一個主鍵,但這是肉汁。

希望這有助於:)

PS如果您有關於整合或利用的OpenID的疑惑,然後通過實施步驟。識別在OpenId Url中的所有源代碼,然後問問自己是否有可能讓惡意用戶訪問該入口點。我希望只有一個這樣的入口點,除了可信的OpenId提供者之外,其他人都無法訪問它。

+0

我忘記了第二個表中的UserID。固定。 – CMircea 2010-04-08 19:57:09