【问题标题】:Forms Authentication Across Applications has no cookie跨应用程序的表单身份验证没有 cookie
【发布时间】:2013-12-21 14:23:12
【问题描述】:

我有两个应用程序。第一个是需要身份验证的 ASP.NET 4 MVC 应用程序。第二个是一个将处理身份验证并设置表单身份验证cookie的应用程序。

在授权应用上,我调用

FormsAuthentication.SetAuthCookie(username, false);

然后我做一个简单的 Response.Redirect 回到我的 MVC 应用程序。

在 MVC 应用程序中,我正在制作一个继承自 AuthorizeFilter 的自定义过滤器。在 OnAuthorization 方法上,我打算解密 cookie 并从授权用户那里获取一些额外的用户数据。

我的问题是,

HttpContext.Current.Request.Cookies

里面什么都没有。我已经检查了 fiddler,并且身份验证应用程序正确设置了 cookie,并且 MVC 应用程序获取了 cookie,但是当它到达我的过滤器时,那里什么都没有。

我的 web.config 在两个应用程序中都有完全相同的设置:

      <forms
    name=".ASPXFORMSAUTH"
    protection="All"
    path="/"
    timeout="30"
    enableCrossAppRedirects="true"
    domain="localhost"/>

并且我已经使用相同的 machineKey 进行了设置,以便能够解密 cookie。问题是,我在 MVC 过滤器中的 OnAuthorization 方法中没有看到任何 cookie。

现在这两个应用程序都在我的本地 IIS 实例上运行。

【问题讨论】:

  • 您说的是第二个请求中没有 cookie,对吗?
  • 在我的身份验证应用程序上点击“登录”后,单击按钮会设置身份验证 cookie 并执行 Response.Redirect(MVCUrl) 在提琴手中我看到了 cookie,但在 MVC 授权过滤器中我是建设,我在 cookie 集合中找不到任何东西
  • 所以,当您调用 FormsAuthentication.SetCookie... 时,cookie 肯定不会存在,但在随后的调用中它应该存在。也就是说,您应该能够在使用表单身份验证时使用现有的 AuthorizeAttribute
  • 是的,在我调用 cookie 之后,我可以在 fiddler 中看到它是为后续调用设置的。我正在制作自己的继承自 AuthorizeAttribute 的过滤器。我在要读取的身份验证 cookie 中设置了一些附加信息,但在 C# 代码中,cookie 集合为空。尽管我可以在提琴手上看到它至少是为了兜风而传递的。
  • 所以...... asp.net 可能会在他们授权后剥离 cookie,但我不确定这一点。我所知道的是,您将无法向该 cookie 添加其他信息,因为它已被加密和散列以防止篡改(我认为您可以在 web.config 中禁用它......但我不推荐它)

标签: c# asp.net asp.net-mvc cookies forms-authentication


【解决方案1】:

所有奇怪的行为都是由于每个应用程序之间的 httpRuntime 不同。我的 MVC 应用程序设置为 4.5,而我设置 cookie 的应用程序是 4.0。显然,加密在幕后发生的方式发生了变化,因此当 cookie 通过管道时,它会被剥离,因为 ASP.NET 无法解密它。

当我手动尝试通过将 name 属性设置为不同来解密 cookie 时,我遇到了这个问题。这样我就可以访问 cookie 并尝试 dectypt,但那时我会得到一个异常。

我发现以下链接将我引向了正确的方向:Sharing a cookie between two websites on the same domain

通过在机器密钥上设置兼容模式设置,cookie可以顺利通过并且可以被解密。

【讨论】:

  • 我在 web.config 中遇到了同样的问题,我的 httpRuntime targetFramework="4.6"。但是我没有看到任何cookie。好奇怪~~~
  • 谢谢你,这为我节省了几个小时的时间:D
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 2015-09-03
  • 2011-01-10
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多