【发布时间】:2012-12-28 10:55:49
【问题描述】:
我正在尝试在 2 个 Web 应用程序(应用程序 A 和应用程序 B)之间开发 SSO 身份验证。应用程序 A 是 MVC 4 应用程序,应用程序 B 是 MVC 3 应用程序。
应该发生的是:
- 当用户尝试访问应用程序 B 时,他将被重定向到应用程序 A 的登录页面
- 他登录应用程序A后,将被重定向到应用程序B
实际发生的是:
- 用户尝试访问应用程序 B,他被重定向到应用程序 A 进行登录
- 用户登录到应用程序 A,他被重定向到应用程序 B
- 这里出了点问题,因为应用程序 B 将用户重定向回应用程序 A 进行登录,就好像他还没有登录一样
我已经完成了这些步骤来找出问题所在:
- 确认身份验证 cookie 正在传递给应用程序 B
- 确认 web.config 中两个应用程序的机器密钥验证和解密密钥相同
- 确认 enableCrossAppRedirects 在 web.config 中启用
- 我使用此论坛帖子中的代码来确定两个应用程序是否能够解密身份验证 cookie:http://forums.asp.net/t/1762166.aspx/1
- 身份验证 cookie 在应用程序 A 中成功解密,但在应用程序 B 中未成功解密。应用程序 B 在 FormsAuthentication.Decrypt 方法期间出现“无法验证数据”异常
谁能帮我解决这个问题?为什么即使他们使用相同的机器密钥,解密也会失败?我还能依靠这种身份验证方法吗?因为这篇文章说它不再可靠了。 http://blog.appharbor.com/2012/02/22/asp-net-forms-authentication-considered-broken
谢谢!
【问题讨论】:
-
如何将 cookie 从 A 传递到 B?我假设他们在不同的域上?
-
不,它在同一个域中,但不同的 Web 应用程序。 cookie 由浏览器在请求标头中自动传递。
-
像这样:app.com/a/login 和 app.com/b/login ?
-
不,domain.com/appA 和 domain.com/appB。当用户尝试访问 domain.com/appB 时,应将用户重定向到 domain.com/appA/Login
-
对两个 cookie 使用相同的名称。
标签: asp.net asp.net-mvc-3 asp.net-mvc-4 forms-authentication machinekey