Beide Auswahlmöglichkeiten beziehen sich auf den Algorithmus, den der Identitätsanbieter zum Signieren des JWT verwendet. Das Signieren ist eine kryptografische Operation, die eine "Signatur" (Teil des JWT) generiert, die der Empfänger des Tokens validieren kann, um sicherzustellen, dass das Token nicht manipuliert wurde.
RS256 (RSA-Signatur mit SHA-256 ) ist ein asymmetrischer Algorithmus und verwendet ein öffentliches / privates Schlüsselpaar: Der Identitätsanbieter verfügt über einen privaten (geheimen) Schlüssel, der zum Generieren der Signatur verwendet wird, und der Verbraucher des JWT erhält einen öffentlichen Schlüssel um die Unterschrift zu validieren. Da der öffentliche Schlüssel im Gegensatz zum privaten Schlüssel nicht gesichert werden muss, stellen die meisten Identitätsanbieter ihn den Verbrauchern leicht zur Verfügung, um ihn zu erhalten und zu verwenden (normalerweise über eine Metadaten-URL).
HS256 ( HMAC mit SHA-256) beinhaltet andererseits eine Kombination aus einer Hashing-Funktion und einem (geheimen) Schlüssel, der von den beiden Parteien gemeinsam genutzt wird, um den Hash zu generieren, der als Signatur dient. Da derselbe Schlüssel sowohl zum Generieren als auch zum Validieren der Signatur verwendet wird, muss darauf geachtet werden, dass der Schlüssel nicht kompromittiert wird.
Wenn Sie die Anwendung entwickeln, die die JWTs verbraucht, können Sie HS256 sicher verwenden, da Sie die Kontrolle darüber haben, wer die geheimen Schlüssel verwendet. Wenn Sie andererseits keine Kontrolle über den Client haben oder keine Möglichkeit haben, einen geheimen Schlüssel zu sichern, ist RS256 besser geeignet, da der Verbraucher nur den öffentlichen (gemeinsam genutzten) Schlüssel kennen muss.
Da der öffentliche Schlüssel normalerweise von Metadatenendpunkten zur Verfügung gestellt wird, können Clients so programmiert werden, dass der öffentliche Schlüssel automatisch abgerufen wird. Wenn dies der Fall ist (wie bei den .Net Core-Bibliotheken), müssen Sie weniger an der Konfiguration arbeiten (die Bibliotheken rufen den öffentlichen Schlüssel vom Server ab). Symmetrische Schlüssel müssen dagegen außerhalb des Bandes ausgetauscht werden (um einen sicheren Kommunikationskanal zu gewährleisten) und manuell aktualisiert werden, wenn ein Signaturschlüssel-Rollover auftritt.
Auth0 bietet Metadatenendpunkte für die Protokolle OIDC, SAML und WS-Fed, an denen die öffentlichen Schlüssel abgerufen werden können. Sie können diese Endpunkte unter den "Erweiterten Einstellungen" eines Clients sehen.
Der OIDC-Metadatenendpunkt hat beispielsweise die Form https://{account domain}/.well-known/openid-configuration
. Wenn Sie zu dieser URL navigieren, wird ein JSON-Objekt mit einem Verweis auf angezeigt https://{account domain}/.well-known/jwks.json
, das den öffentlichen Schlüssel (oder die öffentlichen Schlüssel) des Kontos enthält.
Wenn Sie sich die RS256-Beispiele ansehen, werden Sie feststellen, dass Sie den öffentlichen Schlüssel nirgendwo konfigurieren müssen: Er wird automatisch vom Framework abgerufen.