如何在ASP.NET Core应用中配置Access-Control-Allow-Credentials?
解决ASP.NET Core中CORS携带凭据被拦截的问题
你的CORS配置缺少了允许携带凭据的关键设置,导致带Cookie或授权头的请求触发浏览器CORS策略限制。以下是修复方案:
1. 修改后端CORS策略配置
在现有策略中添加.AllowCredentials()方法,该方法会让服务器返回Access-Control-Allow-Credentials: true响应头,允许浏览器接受携带凭据的跨域请求。同时根据需求补充允许的请求头和方法:
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; var builder = WebApplication.CreateBuilder(args); builder.Services.AddCors(options => { options.AddPolicy(name: MyAllowSpecificOrigins, builder => { builder.WithOrigins("http://my-account-name.github.io", "http://my-account-name.github.io/My-repository", "https://my-account-name.github.io", "https://my-account-name.github.io/My-repository") .AllowCredentials() // 启用凭据支持 .AllowAnyHeader() // 允许所有请求头(可根据实际需求限制) .AllowAnyMethod(); // 允许所有HTTP方法(可根据实际需求限制) }); }); // 其他服务注册代码... var app = builder.Build(); // 注意中间件顺序:UseCors必须放在UseRouting之后、UseAuthorization之前 app.UseRouting(); app.UseCors(MyAllowSpecificOrigins); app.UseAuthorization(); // 端点配置及其他中间件... app.Run();
2. 前端请求需指定携带凭据
使用fetch发起请求时,必须添加credentials: 'include'选项,否则浏览器不会自动发送Cookie或凭据信息:
fetch('你的API接口地址', { method: 'GET', // 或POST/PUT等你需要的方法 credentials: 'include' // 明确携带凭据 }) .then(res => res.json()) .then(data => console.log(data)) .catch(err => console.error('请求出错:', err));
额外注意事项
.AllowCredentials()不能与.AllowAnyOrigin()同时使用,必须指定具体的允许域名,你的配置已经符合要求- 确保Cookie的
SameSite属性配置正确:跨域场景下需设置为SameSite=None,同时Cookie必须开启Secure(仅HTTPS传输) - 中间件顺序不能错,
UseCors的位置会直接影响策略是否生效
内容的提问来源于stack exchange,提问作者Ivan Silkin
相关产品推荐
相关产品推荐

