OpenId身份验证漏洞

时间:2011-01-17 08:47:58

标签: openid dotnetopenauth

前段时间我已经实现了OpenId身份验证,并记住用过ClaimedIdentifier的用户(在DotNetOpenAuth方面) - OpenId提供程序在验证后返回的字符串。

但我突然明白这个解决方案有漏洞。让我们假设有一个OpenId提供程序1为用户1返回标识的“identifier1”。现在,如果我知道这个标识符,我可以启动我的自定义OpenId提供程序并返回相同的标识符 - 所以我将能够在用户1下登录。 / p>

现在我正考虑存储openid_identifier(OpenId提供者URL)+ ClaimedIdentifier。

我的思考是否正确?我没有错过任何其他可能的漏洞吗?

1 个答案:

答案 0 :(得分:2)

实际上,您认为这个漏洞不是漏洞。 OpenID协议本身(以及DotNetOpenAuth库)包括对任意OpenID提供程序的保护,该OpenID提供程序断言它不拥有的标识符。所以不,你不仅不需要将OP端点(你称之为OpenId提供者URL)与声明的标识符一起存储,但如果你这样做,你就会破坏OpenID的一些灵活性。

你可能会问这个问题,那么它是如何运作的呢?为什么这不是一个漏洞?
答案来自这样的事实:只要提供者(OP)向依赖方(RP)断言声明的标识符,RP就不仅仅信任OP。它没有理由相信OP,因为如你所说,任何人都可以设置任意OP。相反,RP获取声明的标识符并对其执行发现。基本上RP正在询问所声称的标识符“OP foo.com是否有权声明您的身份?”只有给定声明的标识符的真实OP才能使标识符对此问题说“是”。 “否”响应将导致RP拒绝断言并告知用户在身份验证期间出现错误。

相关问题