8

Mamy klienta wywołującego, który żąda do naszego systemu, który nie umieszcza tokena na okaziciela w standardowym miejscu (nagłówek "autoryzacji") Chciałbym utworzyć niestandardową procedurę obsługi, która wyszuka hasło JWT we właściwym miejscu. miejsce. Poza rozwidleniem implementacji JwtBearerMiddleware jest jakiś bardziej przejrzysty sposób, w jaki mogę po prostu powiedzieć middleware jakiego programu obsługi użyć?Niestandardowa lokalizacja tokenów dla JwtBearerMiddleware

Łatwiejszą opcją byłoby po prostu przepisanie żądania przez wstrzyknięcie JWT w odpowiednie miejsce (nagłówek żądania) w potoku żądania tuż przed uruchomieniem oprogramowania pośredniego JWT. Ale wydaje się to trochę hacky.

Odpowiedz

5

Istnieje wbudowany sposób, aby to zrobić, bez konieczności rozwidlania kodu lub próby dostarczenia własnego programu obsługi. Wszystko co musisz zrobić, to hak jakiś kod w przypadku 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); 
     } 
    } 
}); 

Jeśli spojrzeć na source właściwość Token jest sprawdzana po obsługi zdarzeń jest wykonywany. Jeśli ma wartość NULL, to obsługa przebiega z domyślnym sprawdzeniem nagłówka Authorization.

+1

Wielkie dzięki za to. Zrobiłem zeskanowanie źródła, ale nie wstawiłem dwóch i dwóch razem z linią kodu, którą połączyłeś. Działa jak marzenie. Dla wszystkich zainteresowanych muszę dodać token Okaziciela w ciągu zapytania, ponieważ używamy SignalR (nie chcemy używać plików cookie) i chcemy pobrać token z ciągu zapytania. – Lutando

+0

@Lutando Cieszę się, że mogę Ci pomóc! –

Powiązane problemy