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`

政策制定者:

        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");

Header 未设置:

您可以单独控制 IdentityServer 中的 CORS,使用客户端定义中的 AllowedCorsOrigins 属性:

        AllowedCorsOrigins =
        {
            "https://localhost:5001"
        }

您的管道看起来也有点奇怪:

        app.UseStaticFiles();
        app.UseCors("AllowAllOrigins");

我看不出有任何理由在您的案例中的 UseEndpoints 中间件之后添加中间件。

管道看起来像这样,您的传入请求通过这个管道进行处理,每个中间件都可以对请求采取行动,它看起来像这样: