4

我正在尝试在 2 个 Web 应用程序、应用程序 A 和应用程序 B 之间开发 SSO 身份验证。应用程序 A 是 MVC 4 应用程序,应用程序 B 是 MVC 3 应用程序。

应该发生的是:

  1. 当用户尝试访问应用程序 B 时,他将被重定向到应用程序 A 的登录页面
  2. 在他登录到应用程序 A 后,他将被重定向到应用程序 B

实际发生的是:

  1. 用户尝试访问应用程序 B,他被重定向到应用程序 A 进行登录
  2. 用户登录到应用程序 A,他被重定向到应用程序 B
  3. 这里出了点问题,因为应用程序 B 将用户重定向回应用程序 A 进行登录,就好像他还没有登录一样

我已经完成了这些步骤来找出问题所在:

  1. 确认身份验证 cookie 正在传递给应用程序 B
  2. 确认 web.config 中两个应用程序的机器密钥验证和解密密钥相同
  3. 确认在 web.config 中启用了 enableCrossAppRedirects
  4. 我使用此论坛帖子中的代码来确定两个应用程序是否能够解密身份验证 cookie:http ://forums.asp.net/t/1762166.aspx/1
  5. 身份验证 cookie 在应用程序 A 中成功解密,但在应用程序 B 中未成功解密。应用程序 B 在 FormsAuthentication.Decrypt 方法期间给出“无法验证数据”异常

谁能帮我这个?为什么即使他们使用相同的机器密钥,解密也会失败?我还能依靠这种身份验证方法吗?因为这篇文章说它不再可靠了。 http://blog.appharbor.com/2012/02/22/asp-net-forms-authentication-considered-broken

谢谢!

4

1 回答 1

3

Uf..终于找到了问题。问题是因为应用程序 A 以 .NET Framework 4.5 为目标,而应用程序 B 以 .NET Framework 4 为目标。

我之前怀疑过这一点,但显然改变项目属性中的目标框架是不够的。您必须将此添加<httpRuntime targetFramework="4.5"/>到应用程序 B web.config 才能使其正常工作。

于 2012-12-28T16:40:37.373 回答