【问题标题】:ASPNET MVC 5: Anti-forgery cookie not presentASP NET MVC 5:防伪 cookie 不存在
【发布时间】:2017-04-12 02:19:14
【问题描述】:

我有一个使用 antiforgerytoken 来保护所有表单的应用程序。该应用程序托管在将 http 绑定设置为 8080 abd 将 https 设置为 443(默认 https 端口)的网站上。到目前为止,我确保所有请求都是通过 https 发出的(MVC 应用程序正在使用所需的 https 过滤器,web config 将 cookies 条目 requiressl 设置为 true,并且 owin 将 auth cookies 也设置为 https)。

最近,我们不得不改变一些事情,因为现在我们有一个防火墙来为我们处理 https 请求。它将始终通过 https 向最终客户端提供响应,但我更改了我的应用程序,以便可以通过 http 调用它。

我已从配置中删除了所需的 https 过滤器、cookie 所需的 ssl 并更改了 owin auth cookie 设置,并认为一切都会好起来的。不幸的是,这并没有发生,我已经开始在验证期间收到防伪令牌 cookie 丢失异常。现在,问题是,如果我使用 https,一切正常,但如果我更改为 http(位于端口 8080 中),它就会中断。

我最终从全局 asax 中更改了防伪配置设置,但我无法为之前的问题找到一个好的解释。换句话说,为什么https访问没有任何问题但http访问最终抛出异常说它找不到防伪cookie...

有什么想法吗?

谢谢, 路易斯

【问题讨论】:

    标签: asp.net-mvc http https antiforgerytoken


    【解决方案1】:

    您很可能正在使用安全 cookie(使用 Secure 标签发送的 cookie)。这些只能在 HTTPS 连接上生存。一旦 SSL 被删除,任何安全 cookie 也会被删除。您可以将其关闭,但这实际上会为您的用户打开一个攻击向量,允许他们的 cookie 通过协议切换以纯文本形式公开。

    您能做的最好的事情就是始终保持安全。仅仅因为防火墙提供了 SSL,并不意味着您也不能在您的站点上实施 SSL。唯一的区别是您需要一个自签名证书,因为显然外部域将不适用。除此之外,在内部代理到安全站点而不是不安全站点应该没有问题。

    【讨论】:

    • 你好克里斯。我能做到。但请注意,我所描述的行为在通过防火墙接收请求时不会发生。当我从我的应用程序中删除以前的设置后访问机器时会发生这种情况,这使得它只能通过 https 工作。所以,我最终得到了一个应该通过 http 或 https 工作的应用程序,但是当我尝试通过 http 访问它时,我提到的防伪错误失败了(不知道为什么,但是如果我使用名称 localhost而不是 AD 机器名称,我最终不会得到错误)。
    • @Chris Pratt 提醒我更改 ssl,现在就像我预期的那样在 localhost 中工作,请参阅:
    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2021-07-09
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多