【问题标题】:Identity Server 4 not setting `Access-Control-Allow-Origin` for `.well-known/openid-configuration`Identity Server 4 没有为 `.well-known/openid-configuration` 设置`Access-Control-Allow-Origin`
【发布时间】: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");

标题未设置:

【问题讨论】:

    标签: asp.net-core cors identityserver4


    【解决方案1】:

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

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

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

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

    在您的情况下,我看不出有任何理由在 UseEndpoints 中间件之后添加中间件。

    管道如下所示,您的传入请求通过此管道进行处理,每个中间件都可以对请求执行操作,如下所示:

    【讨论】:

    • 嗯,如果没有效果,那么设置这个CorsPolicyName 有什么意义呢?顺便说一句,你的建议奏效了,我只是觉得很奇怪......
    • 因为您在管道中最后使用了 UseCors,所以它可能根本不会受到打击。您总是可以尝试在管道中更早地添加它。也可能是 IdentityServer 会完全阻止 CORS 请求,因为它们会违反客户端定义中的 CORS-URL。
    • 好的,那我想我还不明白如何正确设置管道...感谢您的帮助:)
    • 添加了一张图片(来自我的一个培训课程),说明如何推断管道和每个应用程序。UseXXX() 按顺序向此管道添加一个项目。
    猜你喜欢
    • 2017-06-23
    • 2020-04-02
    • 2019-01-03
    • 2023-01-07
    • 2020-06-29
    • 2016-10-08
    • 2019-02-08
    • 2017-11-15
    • 2018-05-10
    相关资源
    最近更新 更多