【问题标题】:XSRF-TOKEN not updated when using IISExpress and localhost使用 IISExpress 和 localhost 时未更新 XSRF-TOKEN
【发布时间】:2017-12-20 20:12:25
【问题描述】:

.Net Core api 层和带有 Angular2 前端的 .Net Core MVC。在本地,它们运行在不同的网站(localhost:xxx1 和 localhost:xxx2)并发布,api 运行在前端的子目录中。

我已经像这样设置了 .Net Core Antiforgery:

在配置服务部分:

services.AddAntiforgery(options =>
        {
            options.HeaderName = "X-XSRF-TOKEN";
        });

在配置部分:

app.Use(next => context =>
        {
            var tokens = antiforgery.GetAndStoreTokens(context);
            context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false });
            return next(context);
        });

当我最初启动网站并在 Chrome 中浏览网站时,我确实获得了 2 个 Antiforgery 令牌(.AspNetCore.Antiforgery.xxxx 和 XSRF-TOKEN),当我进行 get/post/etc 调用时,我看到了x-xsrf-token 标头被添加到调用中。

问题出在每次调用时,api 返回一个新的 XSRF-TOKEN cookie 但本地我的 cookie 没有更新,它始终包含原始值。在线发布时,不会发生这种情况,cookie 每次都会更新。

我尝试在本地设置站点以使用 localhost.somedomain.com,但这没有用。

关于我做错了什么或如何让它在本地工作的任何建议?

【问题讨论】:

  • 您能否在问题中添加您在哪个项目中添加了防伪。我感觉你已经将它添加到你的 web 项目中,而它实际上应该在你的 API 项目中。还要注意,cookie不需要更新,可以多次调用。
  • 防伪码在web api中。我用下面的答案想通了

标签: asp.net-core antiforgerytoken


【解决方案1】:

我的本​​地机器上的问题是我在自己的 IIS Express(localhost:xxx1 和 localhost:xxx2)中运行每个应用程序。 在这篇文章 (https://docs.microsoft.com/en-us/aspnet/core/publishing/iis) 之后,我最终将 IIS 设置为托管 .net 核心,我得到了预期的结果。

【讨论】:

    猜你喜欢
    • 2016-04-28
    • 2021-04-05
    • 2018-11-01
    • 2018-09-06
    • 2020-03-30
    • 2017-07-13
    • 2015-01-18
    • 2018-01-07
    • 2020-11-15
    相关资源
    最近更新 更多