2011-09-05 53 views
1

我即將創建一個數據庫表來存儲OpenID登錄。我想我會包括這三列中,除了聲明的標識符:存儲OpenID端點,OP-本地標識符和領域?

你存儲這些字段?

你認爲這是合理的存儲這些領域?有以下原因:

  • 的OpenID端點:那麼你知道哪些OpenID提供認證的用戶。也許在將來你會發現一個提供商並不是非常值得信賴,然後我認爲很有可能知道someuser.example.com是否被該提供商認證。

  • OP-Local Identifier:我認爲它允許我跟蹤用戶,即使她更改了她的用戶提供的標識符。 (例如,如果她的用戶提供的標識符是example.com/username,但她將其更改爲somewherese.com/username,那麼我認爲OP-Local標識符將保持不變(假定用戶繼續使用相同的OpenID提供程序) 。

  • 的境界:我建立一個多租戶web應用程序,如果我儲存的境界,它會更容易知道,如果兩個看似不同的OpenID標識符可能代表同一個人(Google uses directed identities:你的聲明ID變化)

  • 版本:如果將來出現某些安全問題,使用某些OpenID版本,則可能很好知道哪些用戶可能會受到影響。

  • 用於統計收集目的的領域和端點。

(你能想出一些其他OpenID的相關值的我應該存放?比如,我想,以確定供應商。要做到這一點,就足以存儲端點?我並不需要存儲提供商的名稱?)

回答

2
  • OpenID端點:可信嗎?提供者如何可信賴(或不可信)?它並不主張任何關於它不擁有的數據,所以它不可能說謊。無論它的行爲如你所期望的那樣是另一回事。此外,由於某種原因,提供者可能會爲每個用戶擁有不同的端點(例如,/server-username)。
  • OP-本地標識符:你不應該(因爲規範說的是這樣),但是,在極少數情況下,它將會成功。然而,改變你的提供者比改變你的身份要多得多。如果你真的想改變你的身份,改變提供者(或註冊一個不同的賬戶)並不難。一種情況下,如果用戶失去承載聲稱身份的域名,將會有所幫助。但是,提供商更有可能停止提供服務,並且您還需要爲此提供準備(例如,通過爲單個用戶存儲多個ID,例如SO)。如果你已經做好了準備,那麼它可以提供幫助的一種情況就會被另一種機制所覆蓋。
  • 境界:我不明白這對你有什麼幫助。從谷歌,你會得到兩個完全獨立的標識符,除非你需要一個電子郵件地址(爲什麼你需要這個領域呢?),不可能將它們關聯起來。
  • 版本:不太可能,並且版本可能隨新請求(因爲提供者可能更新)而改變。儘管如此,如果你真的想知道你的哪些用戶可能會受到影響,並以某種方式期望他們通過閱讀你網站上的內容獲得任何信息,那麼是的,這可能會有用。

你說過你想識別提供者。但是,正如我上面提到的,如果提供者採取措施避免這種情況,則無法這樣做。例如,您可以將其存儲爲域名,但這並不完美,因爲可能存在同一域下的其他提供商(例如,多個人在共享主機上託管自己的提供商)。

總之,我的意見是,存儲這些是一個壞主意,由於上述原因。

+0

嗨Mewp!非常感謝您的詳細解答! – KajMagnus

+0

好的,存儲OP-Local Identifier是沒有意義的。我沒有在[規範](http://openid.net/specs/openid-authentication-2_0.html)中找到任何地方,聲明我不應該存儲它。 - 實際上,也許我會存儲它,以防萬一我從數據挖掘的角度,以某種奇怪的方式找到它。如果不是,ALTER TABLE DROP COLUMN很快就會在將來的某一天完成。 – KajMagnus

+0

我沒有提到我打算存儲一些用於統計收集目的的數據。例如。我可能想知道哪些領域的登錄次數最多,以及哪些終端和/或提供商是最常見的領域。 (我在問題中添加了一個列表項。) – KajMagnus