8

У нас есть вызывающий клиент, запрашивающий нашу систему, которая не помещает маркер Bearer в стандартное место (заголовок «Авторизация»). Я хотел бы создать настраиваемый обработчик, который ищет JWT в правильном место. Кроме того, для форматирования реализации JwtBearerMiddleware есть ли какой-либо более чистый способ, я могу просто сказать, какое промежуточное ПО использует какой обработчик?Пользовательское расположение токенов для JwtBearerMiddleware

Более простой вариант состоит в том, чтобы просто переписать запрос, введя JWT в нужное место (заголовок запроса) в конвейере запроса непосредственно перед запуском промежуточного программного обеспечения JWT. Но это кажется немного взломанным.

ответ

5

Существует фактически встроенный способ сделать это, без необходимости разворачивать код или пытаться предоставить свой собственный обработчик. Все, что вам нужно сделать, это подключить некоторый код в OnMessageReceived события:

app.UseJwtBearerAuthentication(new JwtBearerOptions() 
{ 
    Events = new JwtBearerEvents() 
    { 
     OnMessageReceived = context => 
     { 
      // Get the token from some other location 
      // This can also await, if necessary 
      var token = context.Request.Headers["MyAuthHeader"]; 

      // Set the Token property on the context to pass the token back up to the middleware 
      context.Token = token; 

      return Task.FromResult(true); 
     } 
    } 
}); 

Если вы посмотрите на source, свойство Token проверяется после того, как обработчик события выполняются. Если он равен нулю, обработчик продолжит проверку по умолчанию для заголовка авторизации.

+1

Большое спасибо за это. Я сканировал источник, но не поставил два и два вместе по линии кода, которую вы связали. Работает как шарм. Для всех, кому интересно, я должен добавить токен-носитель в строку запроса, потому что мы используем SignalR (мы не хотим использовать файлы cookie) и хотим вытащить токен из строки запроса. – Lutando

+0

@ Лутандо Рад помочь! –

Смежные вопросы