【问题标题】:Asp.net Core allow custom headers with CORS (with axios on client side)Asp.net Core 允许使用 CORS 自定义标头(在客户端使用 axios)
【发布时间】:2019-11-01 13:40:18
【问题描述】:

我在客户端和 Asp.net Core Web Api 服务器端有一个应用程序(在 Vuejs 中)+ axios。 我添加了一个 jwt 令牌身份验证。我已将服务器配置为在令牌过期时添加自定义标头。 (我在响应中有“Token-Expired”标头)。

来自 axios 拦截器的 error.response.headers 对象中不存在标头“token-expired”...(注意:令人沮丧,因为标头存在于 Postman 但不存在于 axios)。

编辑:github上的这个问题似乎与我的情况相似https://github.com/axios/axios/issues/606

【问题讨论】:

    标签: asp.net-core cors axios asp.net-core-webapi


    【解决方案1】:

    默认情况下,浏览器不会向应用公开所有响应标头。如需更多信息,请参阅W3C Cross-Origin Resource Sharing (Terminology): Simple Response Header

    默认可用的响应头是:

    • 缓存控制
    • 内容-语言
    • 内容类型
    • 过期最后修改
    • 编译指示

    来源:https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2#set-the-exposed-response-headers

    更多一般信息:https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

    要使应用程序可以使用其他标头,请从启动时调用 Configure 中的 WithExposedHeaders 方法。

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
       // ...
    
       app.UseCors(builder =>
       {
          builder.WithOrigins("http://localhost:8080");
          builder.AllowAnyHeader();
          builder.WithExposedHeaders("Token-Expired");
          builder.AllowAnyMethod();
          builder.AllowCredentials();
          builder.Build();
       });
    }
    

    注意:您必须设置特定的原点(而不是添加 AllowAnyOrigin() 方法)。 事实上,CORS 规范还指出,如果 Access-Control-Allow-Credentials 标头存在,则将来源设置为“*”(所有来源)是无效的。

    等等 :)

    【讨论】:

    • WithExposedHeaders 正是我想要的。这行得通!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2017-04-16
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2019-04-01
    • 2022-10-13
    相关资源
    最近更新 更多