我有一个在Azure AD上注册的. NET 6 Web API,如here所示。我还有一个Web应用registered,它调用我的API并处理身份验证。我可以使用它来获取令牌,然后在Postman中使用它来向我的API发送请求。
现在有一个React应用程序(由另一个团队开发),应该是我的API的前端。我尝试在本地设置整个应用程序,我的API正在侦听localhost:5220,而React应用程序正在localhost:3001上运行。当我尝试发送请求时,我收到以下错误:
错误消息:
CORS策略已阻止从源"http://localhost:3001"在"http://localhost:5220/api/job/all"进行提取的访问:请求的资源上不存在"Access-Control-Allow-Origin"标头。如果不透明响应满足您的需要,请将请求的模式设置为"no-cors"以在禁用CORS的情况下提取资源。
获取http://localhost:5220/api/job/all网络::错误失败307
这些是我的标题:
这里是我的程序的一部分. cs:
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseRequestLocalization(localizationOptions);
app.UseCors(options => options.WithOrigins("http://localhost:3001").AllowAnyHeader().AllowAnyMethod().AllowCredentials());
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
我看到这是中间件的必需顺序,如果我删除UseHttpsRedirection
或将其放在UseCors
之后,我会收到401错误,但随后Access-Control-Allow-Origin标头出现在响应中。我安装了Microsoft. AspNetCore. Cors NuGet包,但它是灰色的。
这是我在launchSettings.json中的应用程序URL:
"applicationUrl": "https://localhost:7220;http://localhost:5220"
我做错了什么?我应该如何配置我的API来发送正确的头文件?为什么我的代码不使用using Microsoft.AspNetCore.Cors
指令?
编辑:原来,前端应用程序没有发送access_token,但现在它被更新了,所以我收到了每个请求的令牌(令牌在Postman中工作),但我仍然面临着如上所述的相同问题。当我从launchSettings中删除HttpsRedirection和localhost:7220时,我仍然会收到401 Unauthorized错误,但我也会在日志中收到以下消息:
[2023 - 01 - 19 13:02:24.112 +02:00 INF]授权失败,不满足以下要求:
拒绝匿名授权要求:需要经过身份验证的用户。
范围授权要求:范围=
[2023 - 01 - 19 13:02:24.114 + 02:00 INF]认证方案:持票人被质询。
有人能告诉我为什么这不管用吗?
1条答案
按热度按时间cwtwac6a1#
在startup.cs文件上尝试一次,
1.创建全局变量
公共字符串"我的允许特定起源"="我的允许特定起源";
1.内部ConfigureService函数写入
服务.添加Cors(c =〉{c.添加策略(我的允许特定起源,选项=〉选项.允许任何起源());});
1.则在配置函数中,使用以下行。
app. UseCors(我的允许特定来源);
现在运行您的应用程序。