2012-11-20 60 views
0

我已經在我的網站上獲得了大量的OAuth登錄。我的實現基於WebSecurity類,並根據我的需要修改了代碼(我將WebSecurity源代碼放入我的代碼中)。DotNetOpenAuth/WebSecurity基本信息交換

但是我現在正面臨一系列新問題。在我的應用程序中,我選擇將用戶電子郵件地址作爲選擇的登錄標識符。它自然是獨一無二的,適合這種用例。

但是,OAuth「標準」再次出現。

某些提供商會將您的電子郵件地址作爲「用戶名」(Google)返回,其中一些將返回顯示名稱(Facebook)。因爲它代表我看到兩個選項給我的特殊情況:

選項1 拉更框架源代碼到我的解決方案,直到我能追跌,其中OpenIdRelyingParty類實際上是用互動(通過DotNetOpenAuth.AspNet門面)並且提供來自OpenID提供者的附加信息請求。

選項2 當用戶在使用OpenID提供我可以顯示一種「完全登記」形式的請求基於所選擇的提供者缺少信息第一日誌。*

選項2是最即時和可能最快的實現,但也包括一些代碼的氣味,因爲必須根據所選提供者做不同的事情。

選項1將需要更長的時間,但最終會使事情更具前瞻性。我需要進行更豐富的互動,所以這在這方面也有優勢。

我越看到代碼,它確實看起來WebSecurity類本身實際上是非常有限的,因爲它隱藏了許多有用的DotNetOpenAuth功能,以便讓集成更容易。

Andrew(DNOA的作者)曾經說過,屬性交換的東西發生在OpenIdRelyingParty類中,但我無法從DotNetOpenAuth.AspNet源代碼中看到使用這個類的地方,所以我不確定哪些源需要被拉進我的代碼,以啓用我需要的功能。

有沒有人完全類似?

回答

1

AttributeExchange僅適用於OpenID提供商(GoogleYahoo!),您可以在各自的源文件中看到使用的擴展名。

我建議不要使用電子郵件地址作爲用戶名。電子郵件地址可以被回收(一個帳戶可以過期或被關閉/取消,並且電子郵件地址可以重新分配給新用戶)。如果發生這種情況,基於電子郵件地址的網站會將舊用戶的所有數據「送出」給新用戶。大規模隱私侵犯和可能發生的訴訟。最好使用OpenID情況下的聲明標識符或OAuth情況下的服務提供商特定用戶標識號作爲用戶表中的主標識符。當然,您可以在網站上的任何地方捕獲並顯示電子郵件地址,您的顯示一個用戶名,以便用戶知道這是用戶名 - 這只是在內部使用了比此更精確的內容。

+0

嗨安德魯,這是面對我在做什麼。我在系統中有3個與識別人員直接相關的表格。UserProfile,Membership和OAuthMembership。每個成員都有一個配置文件,本地登錄名使用電子郵件地址,其他所有內容都使用OAuth/OpenID標識符作爲識別用戶的安全密鑰。我只是想從OpenID獲取電子郵件,以便UserProfile(EMail)中的關鍵字段可以自動填充。我實際上已經爲新註冊的OpenID/OAuth用戶添加了一個頁面,現在手動提供這個頁面......謝謝! – Jammer