DotNetOpenAuth示例中ProviderUserName列的用途

时间:2013-04-04 12:28:50

标签: asp.net openid dotnetopenauth asp.net-4.5 google-openid

我使用Microsoft预定义模板在Visual Studio中启动了一个ASP.NET网站。这是为了帮助我了解ASP.NET中的OpenID。

在示例网站中包含的SQL数据库中,有一个名为UsersOpenAuthAccounts的表,其中包含一个名为ProviderUserName的列。

有人能告诉我这个专栏的目的吗?在我的测试中,这似乎存储了我将登录到OpenID网站的用户名(例如我的Google用户名 - 我的电子邮件地址)。但是,我也看到ProviderUserId列包含IAuthenticationResponse.ClaimedIdentifier值,例如

https://www.google.com/accounts/o8/id?id=AIt................g3c

...用于针对未来请求针对OpenID提供商识别用户。

因此,包含ProviderUserName列是否有任何意义?它实际上并未在微软样本网站的其他任何地方使用过。

1 个答案:

答案 0 :(得分:1)

ProviderUserName是个坏主意(IMO)。

OpenID声明的标识符是检查返回用户的正确字符串。它降低了使用其他任何东西的安全性,包括电子邮件地如果您只对OpenID登录感兴趣,那么您可能只想抛弃ASP.NET提供的代码并直接使用DotNetOpenAuth的OpenIdRelyingParty并自行处理users表。它将与您当前的代码一样简单,但没有不必要的列。

ASP.NET团队的附加列和外观类为您提供的是将OpenID登录与OAuth登录混合的功能,允许您在您的站点接受Twitter和Facebook帐户。 OAuth并非旨在成为身份验证协议,因此使用它的人必须自己构建用户名。为了使其全局唯一,它必须以发出该用户名的提供者为前缀。因此,您有ProviderName(“twitter”或“google”)和ProviderUsername,它是OAuth服务提供商的帐户的用户名(或者用户ID)。