Отключить проверку токена носителя для метода контроллера - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь пропустить проверку токена для методов, которые я хочу сделать "общедоступными" в своем API.

В моем автозагрузке я получил следующее событие, чтобы проверить, авторизован ли вызов:

 x.Events = new JwtBearerEvents
 {
     OnTokenValidated = async context =>
     {
         var sessionManager = context.HttpContext.GetService<ISessionManager>();

         if (!sessionManager.IsCurrentTokenValid())
         {
             context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
             var message = Encoding.UTF8.GetBytes("invalidToken");
             context.Response.OnStarting(async () =>
             {
                 await context.Response.Body.WriteAsync(message, 0, message.Length);
             });
         }
     }
 };

Я пытался удалить атрибут [Authorize] из контроллера, но приведенный выше код по-прежнему срабатывает. Также пытался добавить [IgnoreAntiforgeryToken(Order = 1001)] в метод, который я хочу пропустить, но при этом приведенный выше код запускает.

Знаете ли вы, как я могу отключить его только для определенных методов?

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Обычно вы украшаете контроллеры или действия, которые вы хотите разрешить без аутентификации, с помощью [AllowAnonymous] (см. документы ).

Если у вас несколько аутентификаций (Jwt, Cookie) ивы хотите, чтобы определенные конечные точки были разрешены только с определенной аутентификацией, вы используете атрибут схемы, то есть [Authorize(Scheme = "Cookie)].

0 голосов
/ 15 октября 2019

Попробуйте игнорировать результат проверки токена, если конечная точка реализует AllowAnonymous

x.Events = new JwtBearerEvents
{
    OnTokenValidated = async context =>
    {
        var sessionManager = context.HttpContext.GetService<ISessionManager>();
        var endpoint = context.HttpContext.Features.Get<IEndpointFeature>()?.Endpoint;
        var allowAnon = endpoint?.Metadata.GetMetadata<IAllowAnonymous>() != null;

        if (!allowAnon && !sessionManager.IsCurrentTokenValid())
        {
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            var message = Encoding.UTF8.GetBytes("invalidToken");
            context.Response.OnStarting(async () =>
            {
                await context.Response.Body.WriteAsync(message, 0, message.Length);
            });
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...