Różnica między „aud” a „iss” w jwt

13

Chcę wdrożyć bardziej niezawodną usługę uwierzytelniania i jwtjest to duża część tego, co chcę zrobić, i rozumiem, jak napisać kod, ale mam trochę problemów ze zrozumieniem różnicy między zastrzeżeniem issa audroszczeniami. Rozumiem, że ten definiuje serwer, który wydaje token, a ten odnosi się do aplikacji, która jest przeznaczona do użycia. Ale rozumiem, że moi odbiorcy i emitent są tym samym, myserver.comwydaje token, aby osoby, które przychodzą, myserver.commogły być autoryzowane i uwierzytelniane. Chyba nie widzę rozróżnienia między tymi dwoma twierdzeniami, chociaż wiem, że jest jeden.
Był dobry artykuł namsdn w sprawie wszystkich zastrzeżonych roszczeń i tutaj najbardziej się zdezorientowałem, ponieważ ich emitent i odbiorcy byli zupełnie inni.

Adam McGurk
źródło
Możesz być zainteresowany JWT RFC-7519
Laiv

Odpowiedzi:

10

Są one przeznaczone do scenariuszy, w których masz organ wydający token, który nie jest taki sam jak aplikacja będąca zamierzonym odbiorcą.

Nie może być inaczej dla twojej aplikacji.

Ale rozważ dużą skalowaną aplikację. Być może masz serwer OAuth lub SSO, który wystawia certyfikaty, a aplikacja, która chce tokena, który pokazuje, że serwer SSO sprawdził poświadczenia użytkownika i zezwolił mu na korzystanie z aplikacji. W takim przypadku możesz mieć token za pomocą "aud": "aud.example.com"i "iss": "sso.example.com".

Paweł
źródło
Rozumiem. Było to z mojej strony nieporozumienie, ponieważ myślałem o dwóch rzeczach: 1. Musiałeś mieć zarówno „is”, jak i „aud” jako część roszczeń. 2. Musiały być dla siebie wyjątkowe. To oczywiście nie jest prawda. Więc jeśli masz wniosek taki jak mój, czy w ogóle umieściłbyś te dwa roszczenia w tobie, jwtczy też je pominąłeś, ponieważ byłyby identyczne?
Adam McGurk,
Z pewnością możesz je pominąć i dodać je później, gdy będziesz miał powód, aby z nich skorzystać
Paweł
byłby audczasem stroną trzecią czy nie?
Andy
Chyba jestem również zdezorientowany, dlaczego zakresy nie byłyby używane do wskazania, że ​​użytkownik jest zatwierdzony dla danej aplikacji.
Andy
Tak, audmoże być pojedynczą wartością lub tablicą. Powinien pasować do każdego zamierzonego odbiorcy lub procesora. Załóżmy, że jesteś użytkownikiem (lub aplikacją), który chce wywołać api.example.com w celu uruchomienia zapytania. Jeśli api.example.com ufa jakiejś zewnętrznej usłudze uwierzytelniania (np. Auth0) w zakresie obsługi uwierzytelniania, wówczas ta usługa uwierzytelniania powinna zostać wypełniona aud„api.example.com”, a aplikacja na „api.example.com” powinna sprawdzić, czy to walizka. Zakresy są bardziej szczegółowe niż odbiorców, a także mogą zostać uwzględnione w ładunku użytecznym.
Paweł