Как добавить /.well-known/openid-configuration route в startup.cs вместе с маршрутами контроллера и angular маршрутами? - PullRequest
0 голосов
/ 24 апреля 2020

Я создаю сервер входа в систему, используя Identityserver4. Я использую ASP. net core 3.1 для функциональности и angular 9 проект для обслуживания stati c файлов для экранов входа / регистрации. Проект angular обслуживается из папки wwwroot проекта .netcore.

Чтобы убедиться, что мои маршруты angular работают правильно вместе с маршрутами контроллера, я добавил следующее в моем запуске .cs

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseCors(Constants.Constants.Policy);
        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseAuthorization();
        app.UseIdentityServer();


        app.UseWhen(x => !x.Request.Path.Value.StartsWith("/Account"), builder =>
        {
            builder.Use(async (context, next) => {
                await next();
                if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
                {
                        context.Request.Path = "/index.html";
                        await next();
                }
            })
            .UseDefaultFiles(new DefaultFilesOptions { DefaultFileNames = new List<string>{"index.html"}})
            .UseStaticFiles();
        });

        app.UseEndpoints(endpoints =>
        {
             endpoints.MapControllerRoute(
                 name: "default",
                 pattern: "{controller=Account}/{action=Login}/{id?}");
        });
}

Это гарантирует, что когда URL содержит http://localhost: порт / учетная запись / логин , он будет обслуживаться через маршрут контроллера. Все остальные пути URL будут обрабатываться через angular.

Проблема возникает, когда клиентские приложения пытаются получить доступ к http://localhost: порт / .well-known / openid-configuration URL, чтобы получить документы для обнаружения. Поскольку URL-адрес не начинается с «Учетной записи», он обслуживается через angular, т. Е. Он перенаправляется на страницу индекса. html.

Как добавить маршрут .well-known / openid-configuration в мой файл Startup.cs, чтобы он возвращал документ обнаружения?

Ошибка при доступе к IdentityServer из моего клиентского приложения: enter image description here

Ошибка на веб-странице IdentityServer

enter image description here

1 Ответ

0 голосов
/ 24 апреля 2020

Мне пришлось добавить исключение для маршрута /.well-known вместе с / Account

app.UseWhen(x => !x.Request.Path.Value.StartsWith("/Account") && !x.Request.Path.Value.StartsWith("/.well-known/openid-configuration") , builder =>
        {
            builder.Use(async (context, next) =>
            {
                await next();
                if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
                {
                    context.Request.Path = "/index.html";
                    await next();
                }
            })
                .UseDefaultFiles(new DefaultFilesOptions { DefaultFileNames = new List<string> { "index.html" } })
                .UseStaticFiles();
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...