ASP.NET Core 在授权失败时发送 Access-Control-Allow-Origin 标头

Posted

技术标签:

【中文标题】ASP.NET Core 在授权失败时发送 Access-Control-Allow-Origin 标头【英文标题】:ASP.NET Core send Access-Control-Allow-Origin header on failed authorization 【发布时间】:2020-01-05 22:38:54 【问题描述】:

我的控制器上同时设置了 CORS 和授权。当客户端通过身份验证并发送有效的Authorization 标头时,一切正常。如果客户端发送无效的Authorization 标头或根本没有标头,则来自服务器的响应是没有Access-Control-Allow-Origin 标头的401,这会导致客户端出现很多问题。

有没有办法强制 asp.net core 即使授权失败也总是发送Access-Control-Allow-Origin 标头?

【问题讨论】:

【参考方案1】:

解决方案是在使用授权之前使用 CORS。

不工作

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

if (env.IsProduction())

    app.UseCors(builder =>
    
        builder
            .WithOrigins("https://example.com")
            .AllowAnyMethod()
            .AllowAnyHeader();
    );

else

    app.UseCors(builder =>
    
        builder
            .AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader();
    );

工作

if (env.IsProduction())

    app.UseCors(builder =>
    
        builder
            .WithOrigins("https://example.com")
            .AllowAnyMethod()
            .AllowAnyHeader();
    );

else

    app.UseCors(builder =>
    
        builder
            .AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader();
    );


app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

【讨论】:

以上是关于ASP.NET Core 在授权失败时发送 Access-Control-Allow-Origin 标头的主要内容,如果未能解决你的问题,请参考以下文章

每当我发送包含 Bearer 令牌的请求时,ASP.Net Core API 总是返回 401 未授权

仅 xamarin 表单应用程序的 Asp.net Core 授权失败

在 Asp.Net Core 中使用 Swagger 在请求中未发送授权承载令牌

ASP.NET Core 2.0 JWT 验证失败并出现“用户授权失败:(null)”错误

在 ASP.NET Core 中未经授权时重定向到登录

Angular 和 Asp.Net Core - 启用 2 因素身份验证