Obie opcje odnoszą się do algorytmu używanego przez dostawcę tożsamości do znaku JWT. Podpisywanie jest operacją kryptograficzną, która generuje "podpis" (część JWT), którą odbiorca tokena może zweryfikować, aby upewnić się, że token nie został naruszony.
RS256 (RSA podpisanie z SHA-256) jest asymmetric algorithm, i używa/para prywatnego klucza publicznego: dostawca tożsamości ma klucz prywatny (tajny) użyte do wygenerowania podpisu, a konsument z JWT otrzymuje klucz publiczny do sprawdzania poprawności podpisu. Ponieważ klucz publiczny, w przeciwieństwie do klucza prywatnego, nie musi być chroniony, większość dostawców tożsamości udostępnia go konsumentom w łatwy sposób do uzyskania i używania (zwykle poprzez adres URL metadanych).
HS256 (HMAC z SHA-256), z drugiej strony, to symmetric algorithm, z jednym (tajnym) kluczem, który jest dzielony między dwiema stronami. Ponieważ ten sam klucz służy zarówno do generowania podpisu, jak i do jego sprawdzania, należy zadbać o to, aby klucz nie został naruszony.
Jeśli będziesz rozwijał aplikację zużywającą JWT, możesz bezpiecznie używać HS256, ponieważ będziesz mieć kontrolę nad tym, kto używa tajnych kluczy. Jeśli z drugiej strony nie masz kontroli nad klientem lub nie masz możliwości zabezpieczenia tajnego klucza, RS256 będzie lepiej pasował, ponieważ konsument musi tylko znać klucz publiczny (udostępniony).
Ponieważ klucz publiczny jest zwykle udostępniany z punktów końcowych metadanych, klienci mogą być zaprogramowani do automatycznego pobierania klucza publicznego. Jeśli tak jest (tak jak w przypadku bibliotek .Net Core), będziesz miał mniej pracy do wykonania podczas konfiguracji (biblioteki będą pobierać klucz publiczny z serwera). Z drugiej strony, klucze symetryczne muszą być wymieniane poza pasmem (zapewniającym bezpieczny kanał komunikacji) i aktualizowane ręcznie, jeśli występuje rollover podpisywania kluczy.
Auth0 udostępnia metadane punktów końcowych dla protokołów OIDC, SAML i WS-Fed, w których można pobrać klucze publiczne. Te punkty końcowe można zobaczyć w "Ustawieniach zaawansowanych" klienta.
Punkt końcowy metadanych OIDC ma na przykład postać https://{account domain}/.well-known/openid-configuration
. Jeśli przejdziesz do tego adresu URL, zobaczysz obiekt JSON z odniesieniem do https://{account domain}/.well-known/jwks.json
, który zawiera klucz publiczny (lub klucze) konta.
Jeśli spojrzysz na próbki RS256, zobaczysz, że nie musisz konfigurować klucza publicznego w dowolnym miejscu: jest on automatycznie pobierany przez framework.
przy użyciu rs256 NB - nie jest (lub występowało) [zagrożenie bezpieczeństwa] (https://auth0.com/blog/critical-vulnerabilities-in-json- web-token-libraries /) w wielu bibliotekach, które pozwoliły tokenowi określić, którego algorytmu użyć. Zasadniczo atakujący mógłby użyć publicznego klucza rs256 z kodowaniem hs256, aby udawać, że jest tajnym kluczem. Upewnij się więc, że twoja biblioteka nie ma takiego zachowania! – AlexFoxGill