我最近在我的站点上的身份验证系统中实现了 Google 和 Yahoo 的 OpenID 端点,这样用户就可以避免在我的站点上创建帐户。很常见的做法,对吧?
我有一个具体的问题,但首先是一些背景信息。
当我通过三足身份验证时,我使用 Attribute Exchange 来获取用户的姓名和电子邮件地址。目前,我将他们的 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)。
当用户使用 Google 或 Yahoo OpenID 时,OpenID(关键字段)用于进行身份验证。
好的,现在所有的背景信息都没有了……如果我忘记存储 OpenID 本身并简单地使用我从 Attribute Exchange 返回的电子邮件来验证用户身份,它会安全吗?有人可以欺骗 OpenID 交易的第三部分吗,或者我可以相信,每当我从与 Google 的 OpenID 交易的属性交换部分收到 you@gmail.com 时,它是真实的且不是欺骗的?