使用AOL OpenID对任何站点(包括stackoverflow)进行身份验证时,您可以在表单中指定任何虚假用户名,然后在AOL OpenID站点和目标网站上输入有效的AOL用户名/密码(例如stackoverflow)将被告知身份验证成功,但使用FAKE用户名。
我的问题是,这是OpenID应该起作用的方式,还是AOL做错了什么,或者我只是误解了发生了什么?
我在自己的项目中遇到过这个问题,经过几个小时的调试后,决定看看我是否可以在一个完善的网站上重现它。
我转到stackoverflow,点击“登录”,点击AOL徽标,输入“asdf”作为用户名。它把我带到了AOL OpenID网站,在那里我输入了我真正的AOL用户名/密码。然后我回到了stackoverflow,它说:
Confirm OpenID
This OpenID does not have an account on Stack Overflow yet:
http://openid.aol.com/asdf
Create New Account
我点击了“创建”,现在堆栈溢出上有一个“http://openid.aol.com/asdf”帐户(对不起!我试图删除它但不知道如何)。
这似乎不对......在我的应用程序中,这意味着我正在为我的用户使用的标识符可能不准确/无效......甚至可能有人肆无忌惮地出现,输入别人的AOL OpenID用户名/ URL进入登录框,使用有效的AOL用户名/密码进行身份验证,然后访问目标网站上的其他帐户?
在返回唯一标识符(如Google或Yahoo)的OpenID提供商网站上,这似乎不是问题。
感谢您的任何建议......这让我的开发工作变得疯狂......
答案 0 :(得分:3)
OpenID依赖方(stackoverflow)应该对您提供的ID(asdf)执行发现,以便找到OpenID提供程序(AOL)。然后,当您登录到提供程序并且它发回一个肯定的ID断言时,依赖方is supposed to verify声明断言中声明的ID与先前发现的信息匹配。这就是OpenID防止欺骗的方式。如果stackoverflow在没有验证匹配的情况下使用最初输入的ID而不是最终断言中的ID,那将是一个错误。
(我过度简化了一点,但这就是它的要点。请阅读规范以获取详细信息,特别是有关授权以及声明的ID和本地ID之间的区别。)
以下是测试此验证的网站:
http://www.test-id.net/RP/VerifyAssertionDiscovery.aspx
以下是更多测试:
此外,允许提供者断言其自己领域中的任何ID都属于您,只要它从不断言相同的ID属于其他人。这允许提供商(代表您)为您访问的每个依赖方生成不同的ID,因此您无法使用相同的ID跨多个站点进行跟踪。这是一个隐私功能(虽然我不知道是否有任何提供商实现它)。
答案 1 :(得分:1)
这将是AOL OpenID提供商中的一个(非常严重的)错误。但是,我只是尝试了它们,它对我不起作用。也许他们修好了。你能再试一次吗?
答案 2 :(得分:1)
你能再试一次吗?我相信这个问题已经解决了。