Сделайте так, чтобы Microsoft.AspNetCore.Authorization.AuthorizeAttribute возвращал 401 вместо перенаправления на страницу входа. - PullRequest
0 голосов
/ 10 июля 2019

У меня есть приложение Angular с бэкэндом .Net core 2.2 и внешний поставщик аутентификации.Я хочу использовать атрибут Authorize при получении запросов и либо вернуть данные по методу, либо 401, если человек не авторизован.

В настоящее время он просто перенаправляет на любой установленный DefaultChallengeScheme.

In startup.cs Я пытался удалить DefaultChallengeScheme из services.AddAuthentication(), пробовал этот кодовый блок:

services.AddAuthorization(options =>
{
    options.InvokeHandlersAfterFailure = false;
});

Попытался также попробовать app.UseStatusCodePages(), как описано в этой теме .

Мои настройки аутентификации:

services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = ExternalAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = ExternalAuthenticationDefaults.AuthenticationScheme;
    })
    .AddExternalProvider(options =>
    {
        // ...
    });

При удалении переопределения options.DefaultChallengeScheme используется только маршрутизация страницы входа в систему vanilla, вместо перенаправления на внешнего поставщика.

1 Ответ

0 голосов
/ 10 июля 2019

Я обнаружил, что смотрю на ситуацию неправильно.Мне нужен внутренний обработчик [Authorize], будь то куки или JWT.

.AddExternalProvider(options =>
{
    // ...
    options.Events.OnRedirectToAuthorizationEndpoint /* could also be OnRedirectToLogin */ = context =>
    {
        context.HttpContext.Response.StatusCode = 401;
        return Task.CompletedTask;
    };
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...