sfu*_*ger 11 openid spring-security google-openid openid4java
我目前正在为网站实施OpenID身份验证.在测试过程中,我注意到Google接受了不同版本的Google个人资料ID,例如:
有趣的是,验证的ID也不同(对于上面的样本,相同的顺序):
当然,这使得查找关联的用户帐户非常困难,更不用说不可能了.有趣的是,所有上述ID都适用于Stackoverflow.所以我认为在我的实现中我必须要有一些规范化步骤 - 或者做一些专门的伏都教来完成事情.
看看OpenID身份验证规范的7.2 Normatlization我发现了这个:
URL标识符必须在检索其内容时通过以下重定向进一步标准化,并最终将[RFC3986]的第6节中的规则应用于最终目标URL.该最终URL必须由依赖方记录为声明的标识符,并在请求认证时使用.
以下重定向声明的ID并没有多大帮助,因为我还有两个不同的ID:
查看已验证ID的重定向更有帮助,因为我总是最终得到这个:
好的,看起来我应该遵循经过验证的ID的重定向,而不是声明的ID.
现在的问题是:遵循声明/验证ID的重定向是否安全,例如在搜索DB之前如此:
do {
user = lookup(verifiedId)
if (user is null)
response = fetchUrl(verifiedId)
if (response.location is null) {
break # no redirect, jump out of loop, unknown user
} else {
verifiedId = response.location # use redirect location
}
} while (user is null)
return user;
Run Code Online (Sandbox Code Playgroud)
如果是的话,我怀疑这不仅应该在查找用户时进行,还应该在存储新ID时进行,对吧?
(如果我真的应该重定向,我还有另外一个关于潜在恶意重定向的问题,但是我必须等到我得到这个问题的答案.无论如何都可能过时了)
在这种情况下,我使用电子邮件作为唯一标识符。您可以向 google 请求,请参阅http://code.google.com/intl/en/apis/accounts/docs/OpenID.html#Parameters
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |