2012-07-10 76 views
2

我正在使用DotNetOpenAuth来识别Google用户。我目前正在检索他们的电子邮件地址并将其保存在我的数据库中。但是,如果他们在他们的Google帐户中更改其电子邮件地址,该怎么办?然后我的副本不能再链接到他们的个人资料。DotNetOpenAuth - 如何唯一标识Google用户?

有没有办法通过DotNetOpenAuth唯一标识Google帐户?

+0

您是否在谈论一个完全改变他们的Google用户名的用户?我认为你不能这样做,仍然被视为同一个Google用户。请参阅[这里](http://support.google.com/mail/bin/answer.py?hl=zh_CN&answer=8158)。 – ScottieMc 2012-07-10 14:55:57

+0

确实,他们的帐户电子邮件无法更改。但是如果我收到联系人的电子邮件呢?而且,如果我(例如)用Flickr进行身份验证,而电子邮件更改是可能的呢? – 2012-07-10 16:16:45

+2

哦,好的。那么你应该可以存储** ClaimedIdentifier **。请参阅[这里](http://stackoverflow.com/questions/2196965/storing-dotnetopenauth-information-and-user-info-retrieval) – ScottieMc 2012-07-10 16:32:20

回答

2

始终使用IAuthenticationResponse.ClaimedIdentifier来唯一标识用户!

。在很多方面使用电子邮件地址是不安全的。任何提供者都可以发出肯定的断言,声称用户拥有特定的电子邮件地址。 OpenID并不妨碍OP关于电子邮件地址的说法,所以如果你只是使用电子邮件地址和用户密钥,那么你就会对用户欺骗攻击敞开大门。即使OP没有试图不诚实,你也不能相信它,因为你不知道OP是否验证了电子邮件地址,或只是询问用户他们的电子邮件地址是什么。

即使您信任Google不说谎,但有几个原因(其中一些原因可以减轻,但并不明显)不会将电子邮件地址视为用户标识符。例如,Google允许用户更改其Google帐号背后的电子邮件地址。如果用户这样做,然后返回到您的网站,您的网站会将其标识为不同的用户。更糟糕的是,如果其他用户后来声称为他们的新Google帐户使用了回收电子邮件地址,则您的网站会将其识别为旧用户,并让新用户访问一堆旧用户数据。

OpenID声明的标识符旨在避免所有这些麻烦。

+0

如果您可以扩展原因或提供参考更多信息将是有用的。 – 2012-07-18 22:14:36

+1

我已经按照要求添加了一些原因和OpenID 2.0规范相关部分的链接。 – 2012-08-23 13:29:34