Jestem nowy w JWT. Nauczyłem się trochę o JWT i zrozumiałem, że jest on sformułowany jako "header.claims.signature".Role używające JWT
Rozważmy prosty scenariusz, co następuje:
- Klient zostaje uwierzytelniony
- Klient może mieć (jednego lub więcej) role administratora, członek, zarejestrowany, gość
- Serwer nie utrzymywać żadnych sesja (i zależy wyłącznie od JWT w celu uwierzytelnienia/autoryzacji)
Po uwierzytelnieniu serwer znajduje typ klienta i zakładam, że identyfikator klienta i role będą częścią "roszczeń" w JWT. Daj mi znać, jeśli moje założenie jest nieprawidłowe (lub niezgodne ze standardem).
Część "roszczenia" JWT nie jest zaszyfrowana (tylko zakodowana). Ujawnia to łatwą dziurę w zabezpieczeniach, w której konsument (usługowy) może po prostu zmodyfikować "roszczenia" do części JWT i ponownie wysłać to samo z większą liczbą ról (do których klient/konsument nie ma uprawnień).
Jeśli moje zrozumienie/założenie jest nieprawidłowe, w jaki sposób osiągamy cel, na który jestem nastawiony?
Jeśli zmienię "admin" na "false" na http://jwt.io/, wygląda na to, że podpis nie bardzo się tym przejmuje. Czy coś mi umyka? – user203687
Narzędzie na jwt.io aktualizuje podpis podczas modyfikowania roszczeń JSON. Jeśli chcesz zmodyfikować JWT w innym miejscu i wkleić go, otrzymasz nieprawidłowy podpis zgłoszony przez narzędzie. Na przykład ten JWT ma podpis calculted nad roszczeń w/„admin”: false, ale wówczas roszczenia/ładowność zmodyfikowane do „admin”: true, a więc podpis nie jest ważny: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.uI_rNanTsZ_wFa1VnICzq2txKeYPArda5QLdVeQYFGI –
@BrianCampbell: Excellet! Dokładnie to, czego szukam! –