【问题标题】:Angular app running on azure app service not receive .AspNetCore.Antiforgery cookie sent by .net core web api app on azure在 azure 应用服务上运行的 Angular 应用未收到由 .net 核心 Web api 应用在 azure 上发送的 .AspNetCore.Antiforgery cookie
【发布时间】:2019-05-14 12:30:52
【问题描述】:

我有 angular 5 应用程序和 .net core 2.0 web api 应用程序托管在 azure 上作为应用程序服务。 应用有如下两个网址。

angularclient.azurewebsites.net
serviceapi.azurewebsites.net

我面临的问题是 Angular 应用程序没有接收到 serviceapi 发送的 .AspNetCore.Antiforgery cookie。 Angular 应用程序生成的 Http 发布请求具有“withCredentials: true”标头。我在服务 API 中定义了 cors 策略,如下所示。

      app.UseCors(builder => builder.WithOrigins("angularclient.azurewebsites.net").AllowAnyMethod().AllowAnyHeader());

我已经使用 POSTMAN 发送了一个请求,并测试了服务器是否发送了 cookie。对于 POSTMAN 请求,cookie 正在接收,没有任何问题。 当我在我的测试 IIS 服务器中托管应用程序并检查时。在那个环境应用程序工作正常。帮助我找到解决此问题的方法。

【问题讨论】:

  • 您说您遇到了未设置防伪 cookie 的问题,但您向我们展示了配置 cors 的代码。 Angular 需要一个特定的标头名称,所以.. 您需要正确配置您的 aspnet 核心应用程序。见herehere
  • 感谢您的建议。如您所述,我已经配置了我的 .net 核心应用程序。下面是我的.net核心配置services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");app.UseAntiforgeryTokenMiddleware("X-XSRF-TOKEN");在应用程序中间件配置如下context.Response.Cookies.Append(requestTokenCookieName, tokens.RequestToken, new CookieOptions() { HttpOnly = false });
  • 你能把你的整个ConfigureServicesConfigure方法贴在这里吗?如果太长,隐藏不相关的部分。必须在调用 AddMvc 之前配置 CORS。
  • 啊还有:context.Response.Cookies.Append.. 使用这个作为 cookie 名称 XSRF-TOKEN。这是 Angular 将查找的默认 cookie 名称,而不是您传递的 X-XSRF-TOKEN

标签: angular azure asp.net-core asp.net-core-webapi angular-fullstack


【解决方案1】:

这需要一周时间才能找到 Azure 应用服务中出现此问题的原因。原因是 Microsoft 通过将其包含在公共 suffix list 中来禁止 azurewebsites.net 顶级域上的 cookie。您可以从here找到更多详细信息

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 2015-08-27
    • 2022-01-13
    • 2016-05-04
    • 1970-01-01
    • 2022-10-26
    • 2019-06-28
    • 1970-01-01
    相关资源
    最近更新 更多