Identity Server 4 没有为 `.well-known/openid-configuration` 设置`Access-Control-Allow-Origin`
Posted
技术标签:
【中文标题】Identity Server 4 没有为 `.well-known/openid-configuration` 设置`Access-Control-Allow-Origin`【英文标题】:Identity Server 4 not setting `Access-Control-Allow-Origin` for `.well-known/openid-configuration` 【发布时间】:2020-11-22 01:31:14 【问题描述】:政策生成器:
private CorsPolicy GenerateCorsPolicy()
var corsBuilder = new CorsPolicyBuilder();
corsBuilder.AllowAnyHeader();
corsBuilder.AllowAnyMethod();
corsBuilder.AllowAnyOrigin();
return corsBuilder.Build();
向容器添加策略
services.AddCors(
options =>
options.AddPolicy("AllowAllOrigins", GenerateCorsPolicy());
);
告诉 Identity Server 使用此策略:
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
options.Cors.CorsPolicyName = "AllowAllOrigins";
配置应用程序的其余部分也使用此策略:
app.UseRouting();
app.UseIdentityServer();
app.UseAuthorization();
app.UseEndpoints(
endpoints =>
endpoints.MapControllers();
endpoints.MapRazorPages();
endpoints.MapControllerRoute(
name: "default",
pattern: "controller=Home/action=Index/id?");
);
app.UseStaticFiles();
app.UseCors("AllowAllOrigins");
标题未设置:
【问题讨论】:
【参考方案1】:您可以使用客户端定义中的 AllowedCorsOrigins 属性单独控制 IdentityServer 中的 CORS:
AllowedCorsOrigins =
"https://localhost:5001"
你的管道看起来也有点奇怪:
app.UseStaticFiles();
app.UseCors("AllowAllOrigins");
在您的情况下,我看不出有任何理由在 UseEndpoints 中间件之后添加中间件。
管道如下所示,您的传入请求通过此管道进行处理,每个中间件都可以对请求执行操作,如下所示:
【讨论】:
嗯,如果没有效果,那么设置这个CorsPolicyName
有什么意义呢?顺便说一句,你的建议奏效了,我只是觉得很奇怪......
因为您在管道中最后使用了 UseCors,所以它可能根本不会受到打击。您总是可以尝试在管道中更早地添加它。也可能是 IdentityServer 会完全阻止 CORS 请求,因为它们会违反客户端定义中的 CORS-URL。
好的,那我想我还不明白如何正确设置管道...感谢您的帮助:)
添加了一张图片(来自我的一个培训课程),说明如何推断管道和每个应用程序。UseXXX() 按顺序向此管道添加一个项目。以上是关于Identity Server 4 没有为 `.well-known/openid-configuration` 设置`Access-Control-Allow-Origin`的主要内容,如果未能解决你的问题,请参考以下文章
为啥 acr_values 没有传递给 Identity Server 4 上的 POST /connect/token?
有没有办法撤销另一个用户的访问令牌并结束他们在 Identity Server 4 中的会话?
React Template w/Identity Server not working in .NET 6 - Bearer error The issuer is invalid
ASP.NET 核心 blazor webassembly 为 Identity Server 4 Postman 测试获取令牌