SSO表单身份验证问题。无法解密身份验证Cookie

时间:2012-12-28 10:55:49

标签: asp.net asp.net-mvc-3 asp.net-mvc-4 forms-authentication machinekey

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

应该发生的事情是:

  1. 当用户尝试访问应用程序B时,他将被重定向到应用程序A的登录页面
  2. 登录应用程序A后,他将被重定向到应用程序B
  3. 实际发生的是:

    1. 用户尝试访问应用程序B,他被重定向到应用程序A进行登录
    2. 用户登录到应用程序A,他被重定向到应用程序B
    3. 这里出了点问题,因为应用程序B将用户重定向回应用程序A进行登录,就好像他还没有登录一样
    4. 我已经完成了这些步骤以找出错误的原因:

      1. 确认身份验证cookie正在传递给应用程序B
      2. 确认web.config
      3. 中的两个应用程序的机器密钥验证和解密密钥相同
      4. 在web.config
      5. 中启用了已确认的enableCrossAppRedirects
      6. 我使用此论坛帖子中的代码来确定两个应用程序是否都能解密身份验证Cookie:http://forums.asp.net/t/1762166.aspx/1
      7. 认证cookie在应用程序A中成功解密,但在应用程序B中未成功解密。应用程序B在FormsAuthentication.Decrypt方法中提供“无法验证数据”异常
      8. 任何人都可以帮我吗?为什么解密失败,即使他们使用相同的机器密钥?我还能依靠这种身份验证方法吗?因为这篇文章说它不再可靠了。 http://blog.appharbor.com/2012/02/22/asp-net-forms-authentication-considered-broken

        谢谢!

1 个答案:

答案 0 :(得分:3)

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

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