Различия аутентификации AzureAD / OID C в. Net Framework и. Net Core - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь использовать аутентификацию AzureAD в ASP. Net Базовом приложении и при выполнении некоторых действий контроллера не требуется, чтобы пользователь входил в систему.

Использование Visual Studio 2019, если я создаю совершенно новый ASP. Net Приложение Framework и выберите учетные записи Work / School для аутентификации - HomeController имеет атрибут Authorize. Как только я запускаю приложение, я перенаправляюсь на экран входа Azure. Если я переместу атрибут Authorize из верхней части контроллера Home в действие Contact, при запуске приложения я не буду перенаправлен на вход в систему, пока не нажму ссылку Contact. Это именно то, что я ожидал.

Если я создам новое ASP. Net Базовое приложение (снова выбирая учетные записи Work / School для аутентификации) - и переместите атрибут Authorize из верхней части Домашний контроллер для действия конфиденциальности - я перенаправлен на вход в систему, как только я запускаю приложение, вместо того, чтобы ждать перехода к действию конфиденциальности.

Пример кода

Этот

[Authorize]
public class HomeController : Controller
...
public IActionResult Privacy()
...

ведет себя так же, как этот

public class HomeController : Controller
...
[Authorize]
public IActionResult Privacy()
...

в ASP. Net Core.

1) Чем отличается аутентификация между этими двумя? 2) Существует ли простой способ заставить приложение ASP. Net Core проходить аутентификацию только при нажатии на атрибут Authorize?

1 Ответ

0 голосов
/ 30 января 2020

Это связано с тем, что базовый шаблон asp. net создает глобальный AuthorizeFilter, чтобы убедиться, что для всех действий требуется доступ для аутентифицированного пользователя:

. NET Core 2.x:

services.AddMvc(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
})

. Net Core 3.x:

services.AddControllersWithViews(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});

Вы можете просто удалить фильтр:

. NET Core 2.x:

services.AddMvc()

. NET Core 3.x:

services.AddControllersWithViews();
...