我最近在我的网站上实现了Google和Yahoo的OpenID端点,以便用户可以避免在我的网站上创建帐户。相当常见的做法,对吧?

我有一个具体的问题,但首先是一点背景信息。

当我通过三条腿的身份验证时,我使用的属性交换以获取用户的姓名和电子邮件地址。目前,我正在存储他们的OpenID(一个看起来像这样的长字符串: https://me.yahoo。 com / a / 2z7lplqsni_dgtaw (...一束字母数字)在用户表中的特殊字段中。

让我们说我的用户表看起来像这样。

type  id  password                          email             key
1     1   0e9212587d373ca58e9bada0c15e6fe4  test@example.com
2     1   b8d2f4a50d2b364ff2766556ba50da48  me@gmail.com      https://www.google.com/accounts/o8/id?id=AItOawll6-m_y…
2     2   6687d5d88b359ee1340717ebf0d1afc6  you@gmail.com     https://www.google.com/accounts/o8/id?id=AItOawm3-C_9…
3     1   fd193c2fa449c9d6dc201d62d5ca86d3  him@yahoo.com     https://me.yahoo.com/a/2Z7LplQsnI_DgtAw…
1     2   2e710b13b3dd787e2b15eab3dde508c2  person@site.com

types
1 = native account
2 = Google OpenID
3 = Yahoo OpenID
.

当用户使用本机帐户登录时,电子邮件和密码用于身份验证(DUH)。

当用户使用谷歌或yahoo OpenID时,openID(键字段)用于进行身份验证。

好的,现在所有的背景信息都脱离了...... 如果我忘记存储OpenID本身并且只需使用我从属性交换返回以验证用户的电子邮件来验证,则会安全? 有人可以欺骗一个OpenID交易的第三站,或者我可以通过使用Google的OpenID交易的属性交换部分来信任它,这是真实的,而不是欺骗?

有帮助吗?

解决方案

故意破坏协议将导致您长期重大头痛。例如,考虑用户登录使用自定义内置OpenID服务器的情况,但提供@ Gmail.com电子邮件地址。

在OpenID身份验证Exchange之后,唯一保证的信息绝对一致,可靠是标识URL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top