Asp.Net Core 2 Проверка токена на предъявителя - PullRequest
0 голосов
/ 09 июля 2019

Я изо всех сил пытаюсь найти точный способ проверки моего токена OAuth bearer, который передается при отправке запроса в API, над которым я работаю, который является проектом Asp.Net core.

Цель здесь - извлечь токен на предъявителя и Validate его, и если все в порядке, продолжить выполнение запроса.

До сих пор мои выводы наталкивались на следующее

  • JWT-авторизацию с токеном, которая в основном говорит о access_token

  • Промежуточное ПО для обеспечения безопасности ядра Asp.Net

  • Настраиваемый атрибут Authorize, который обрабатывает это.

Я не совсем уверен, как мне добиться проверки?Должен ли я извлечь токен на предъявителя, а затем создать собственный метод проверки?

В идеале хотелось бы, чтобы атрибут [Authorize] справился с этим.

Предложения, пожалуйста?

1 Ответ

1 голос
/ 10 июля 2019

Ну, наконец, после дополнительных исследований я, наконец, обнаружил, что пользовательский AuthorizationHandler является более подходящим решением, поскольку предполагается использовать пользовательские атрибуты Authorize, которые не предлагаются в Asp.Net Core.

Его было просто настроить, и я могу извлечь свой токен Bearer из заголовка для дальнейшей авторизации с помощью OAuth.

. Вот мой подход:

public class CustomAuthorizationHandler: IAuthorizationHandler
{
   public Task HandleAsync(AuthorizationHandlerContext context)
   {
       var authFilterCtx = (Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)context.Resource;
       string authHeader = authFilterCtx.HttpContext.Request.Headers["Authorization"];
       if (authHeader != null && authHeader.Contains("Bearer"))
       {
          var token = authHeader.Replace("Bearer", "");
          // Now token can be used for further authorization
       }

       throw new NotImplementedException();
    }
}

Наконец, регистрация обработчика в Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IAuthorizationHandler, CustomAuthorizationHandler>();
}
...