Obie opcje dotyczą algorytmu, którego dostawca tożsamości używa do podpisywania JWT. Podpisywanie jest operacją kryptograficzną, która generuje „podpis” (część JWT), który odbiorca tokena może sprawdzić, aby upewnić się, że token nie został zmieniony.
RS256 (podpis RSA z SHA-256 ) jest algorytmem asymetrycznym i wykorzystuje parę kluczy publiczny / prywatny: dostawca tożsamości ma klucz prywatny (tajny) używany do generowania podpisu, a konsument JWT otrzymuje klucz publiczny aby potwierdzić podpis. Ponieważ klucz publiczny, w przeciwieństwie do klucza prywatnego, nie musi być zabezpieczony, większość dostawców tożsamości zapewnia konsumentom łatwy dostęp do niego i do korzystania (zwykle za pośrednictwem adresu URL metadanych).
Z drugiej strony HS256 ( HMAC z SHA-256) obejmuje kombinację funkcji skrótu i jednego (tajnego) klucza, który jest współdzielony przez dwie strony używane do generowania skrótu, który będzie służył jako podpis. 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 opracowywać aplikację korzystającą z 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 znać tylko klucz publiczny (współdzielony).
Ponieważ klucz publiczny jest zwykle udostępniany z punktów końcowych metadanych, klienci mogą zostać zaprogramowani do automatycznego pobierania klucza publicznego. Jeśli tak jest (tak jak w przypadku bibliotek .Net Core), będziesz mieć mniej pracy do wykonania przy konfiguracji (biblioteki będą pobierać klucz publiczny z serwera). Z drugiej strony klucze symetryczne należy wymieniać poza pasmem (zapewniając bezpieczny kanał komunikacyjny) i ręcznie aktualizować, jeśli występuje rolowanie klucza do podpisywania.
Auth0 zapewnia punkty końcowe metadanych dla protokołów OIDC, SAML i WS-Fed, w których można odzyskać klucze publiczne. Możesz zobaczyć te punkty końcowe w „Ustawieniach zaawansowanych” klienta.
Na przykład punkt końcowy metadanych OIDC ma 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 nigdzie nie musisz konfigurować klucza publicznego: jest on pobierany automatycznie przez framework.