1

我正在向系统添加可选的 OpenID 身份验证。使用 DotNETOpenID 一切顺利。然而,当我遇到以下问题时:

  1. 用户使用标准登录 (FormsAutentication) 登录到 Web 应用程序
  2. 用户将一些 OpenID 与帐户相关联(我们在此处使用程序化 OpenID 登录来获取声明的身份)
  3. 用户注销 FormsAuthentication 并使用 OpenID 重新登录(使用 Login 控件)。

在最后一步,我们得到一个重放攻击错误。我怀疑 OpenID 在应用程序商店(用于请求)中保留了一些信息,这些信息用于获取上一个请求,而不是开始一个新请求。

任何人都可以帮助阐明这里的问题吗?

如果问题是我如何理解它,那么在使用编程登录成功地将 OpenID 绑定到帐户后,我该如何清理这个特定的状态信息(假设我手头有成功的请求)?

4

2 回答 2

2

您正在针对哪个提供商进行测试?老实说,这听起来像是在这种情况下最有可能有罪的一方,因为它构成了 openid.response_nonce 值。另一个可能要看的地方是您(偶然)是否在第一次和第二次登录之间的 URL 中维护所有 openid.* 查询字符串参数?例如,在用户输入他们的 OpenID 之前的第二个登录页面,他们的 openid.* 参数是否在页面的 URL 中?如果是这样,这很可能是问题所在,并且可以通过您的程序化页面修复它,从而在登录尝试后导致干净的重定向摆脱它们。

于 2009-07-24T13:56:41.843 回答
0

好的,在第一次分配 OpenID 和使用它进行实际身份验证之间添加 Session.Abandon() (并稍微清理身份验证逻辑)之后,实际问题似乎消失了。

于 2009-09-05T12:52:33.807 回答