You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core 5搭配OpenIdDict时带认证的API请求报CORS错误如何解决?

问题原因

你遇到的CORS报错本质是两个原因共同导致的:

  1. 浏览器发送带自定义Authorization头的POST请求前,会先发送OPTIONS预检请求,这个请求不携带任何认证信息,会被你的API认证中间件直接拦截返回401
  2. ASP.NET Core默认不会给401这类异常响应自动追加CORS头,浏览器收不到合法的CORS响应头,就会抛出跨域错误,掩盖了实际的401认证失败问题

解决方案

按以下步骤依次修改API项目的配置:

1. 全局启用CORS策略

你当前只注册了CORS策略,没有绑定到端点,修改Configure方法里的端点配置:

application.UseEndpoints(x => {
    x.MapControllers().RequireCors("Cors");
});

2. 放行OPTIONS预检请求

在UseCors和UseAuthentication中间件之间加一个预检请求处理中间件,直接给OPTIONS请求返回200响应:

application.UseRouting();
application.UseCors("Cors");

// 新增这段代码
application.Use(async (context, next) =>
{
    if (context.Request.Method == "OPTIONS")
    {
        context.Response.StatusCode = StatusCodes.Status200OK;
        await context.Response.CompleteAsync();
        return;
    }
    await next();
});

application.UseAuthentication();
application.UseAuthorization();

3. 排查token有效性

先用Postman等工具直接携带token请求API接口,确认返回结果是否为401:

  • 如果返回401,先检查OpenIddict内省配置是否正确:确认你的Access Token的audience是否为api、客户端配置是否匹配、token是否在有效期内
  • 如果返回正常响应,说明是单纯的预检请求拦截问题,做完前两步即可解决

内容的提问来源于stack exchange,提问作者Miguel Moura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:54:02