我应该从DotNetOpenAuth存储什么作为UserName

时间:2011-12-20 11:14:09

标签: database asp.net-mvc-3 database-design dotnetopenauth

我使用DotNetOpenAuth将GoogleYahooTwitterFacebook登录集成到我的应用程序中。

现在一切都按预期工作了。

  • Twitter返回 - >用户名和声明标识符(Just Id)
  • Google返回 - >电子邮件地址,名字和姓氏(URL + ID)
  • Yahoo返回 - >电子邮件地址,别名和ID(URL + ID)

我也允许我的用户在内部注册,所以我的数据库用户表是这样的:

  • ID,用户名,名,OpenID的,LoginType,显示名称

我想知道我应该存储什么作为用户名,我在考虑ID,但我有这样的问题:

  1. 我应该将整个ID存储为用户名吗?!
  2. 是否会影响将整个ID(URL)存储为用户名的性能?
  3. 如果我从Claim-Identifier中提取ID,它在所有3个提供商之间是否仍然是唯一的?

1 个答案:

答案 0 :(得分:1)

对于OpenID,您必须使用ClaimedIdentifier作为ID。不是其他任何东西,当然也不仅仅是来自声明的标识符的子字符串。其他任何事情都会严重损害您的应用程序的安全性。

就存储位置而言,我建议您保留一个专用列来存储您声明的标识符,而不是仅将其存储在UserName列中。请考虑以下情况:

  1. 用户使用OpenID http://SomeOpenIDUrl
  2. 在您的网站上创建一个帐户
  3. 攻击者通过用户名/密码表单登录。他将密码留空,但输入http://SomeOpenIDUrl作为用户名
  4. 攻击者成功登录为受害者。
  5. 上述情况当然可以通过各种方式得到缓解,但IMO最好的方法是将OpenID保留在用户名栏之外,这样就完全不可能了。