Аутентификация Azure Ad не работает для нового ядра 2.1 asp.net с угловым 5.2 новым шаблоном.Так как мы не маршрутизируем на домашний контроллер в новом шаблоне - PullRequest
0 голосов
/ 02 января 2019

Мы перенесли наш .net core 2.1 с угловым 4.3 в .net core 2.1 с угловым 5.2.

Теперь мы не можем выполнить Azure Ad Authentication из файла startup.cs, поскольку в определении MapRoute произошли изменения. Для справки,

Предыдущая:

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

последнее:

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

Ранее мы использовали переход к домашнему контроллеру и index.cshtml после аутентификации. Но сейчас в новом шаблоне нет .cshtml.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Я столкнулся с точно такой же проблемой при переносе моего приложения с angular 5 / .Net Core 2.0 на angular 7 / .Net Core 2.2, и я нашел способ сохранить сторону сервера аутентификации.Решением для этого является добавление промежуточного программного обеспечения, которое проверяет, аутентифицирован ли каждый запрос, и если это не так, форсирует его.

        app.Use(async (context, next) =>
        {
            if (!context.User.Identity.IsAuthenticated)
            {
                await context.ChallengeAsync();
            }
            else
            {
                await next();
            }
        });
0 голосов
/ 02 января 2019

Это, вероятно, из-за URL ответа.

Когда выполняется аутентификация, пользователь перенаправляется на ответный URL. Этот URL настроен в AAD.

Возможно, вы настроили корневой URL приложения в ответном URL, который не содержит какого-либо контроллера или действия. Поэтому приложение не может никуда направлять запрос.

Вы можете проверить это на портале Azure.

EDIT: Исходя из вашего комментария, я бы посоветовал проверить, не использовали ли вы «UseDefaultFiles».

UseDefaultFiles пытается найти страницу с именем «По умолчанию» или «Индекс». Но если страница с этими именами недоступна, то вам нужно написать собственную логику

Допустим, вы хотите сделать "mydefault.html" в качестве документа по умолчанию, тогда логика будет такой, как показано ниже.

См. эту документацию .

public void Configure(IApplicationBuilder app)
{
    // Serve my app-specific default file, if present.
    DefaultFilesOptions options = new DefaultFilesOptions();
    options.DefaultFileNames.Clear();
    options.DefaultFileNames.Add("mydefault.html");
    app.UseDefaultFiles(options);
    app.UseStaticFiles();
}
...