2015-07-09 2 views
14

Kürzlich begann ich mit der JWT-basierten Authentifizierung zu arbeiten. Nach der Benutzeranmeldung wird ein Benutzer-Token erzeugt, wie „eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ“ aussehen wird.Was ist der geheime Schlüssel für die JWT-basierte Authentifizierung und wie wird sie generiert?

Es besteht aus drei Teilen, die jeweils durch einen Punkt (.) Getrennt sind.Der erste Teil ist ein Header, der Base64 codiert. {: "HS256", // Algorithmus verwendet "Typ": "JWT" ​​ "alg"}

Der zweite Teil ist Ansprüche und Base64 codiert Nach der Decodierung werden wir so etwas wie bekommen. Nach der Decodierung wir so etwas wie bekommen { "sub": "1234567890", "name": "John Doe", "admin": true }

Der dritte Teil ist Unterschrift und ist mit

erzeugt

HMACSHA256 ( base64UrlEncode (Header) + "" + base64UrlEncode (Payload), Geheimnis base64 codiert)

was ist nun diese geheimen Schlüssel und wie Gen bewerte diesen geheimen Schlüssel ??

Ich habe einige Online-Generator wie "http://kjur.github.io/jsjws/tool_jwt.html" versucht, aber dint bekommen viel Hilfe.

Antwort

16

Der zum Signieren des JWT verwendete Algorithmus (HS256) bedeutet, dass das Geheimnis ein symmetrischer Schlüssel ist, der sowohl vom Sender als auch vom Empfänger bekannt ist. Es wird ausgehandelt und out-of-band verteilt. Wenn Sie der beabsichtigte Empfänger des Tokens sind, sollte der Absender Ihnen das geheime Out-of-Band bereitstellen.

Wenn Sie der Absender sind, können Sie eine beliebige Zeichenfolge als das Geheimnis verwenden, das generiert oder absichtlich ausgewählt werden kann. Sie müssen sicherstellen, dass Sie das Geheimnis dem beabsichtigten Empfänger Out-of-Band zur Verfügung stellen.

Für die Aufzeichnung sind die 3 Elemente in der JWT nicht base64-codiert, sondern base64url-codiert, was eine Variante der base64-Codierung ist, die zu einem URL-sicheren Wert führt.

3

Sie können Ihren eigenen Generator schreiben. Der geheime Schlüssel ist im Wesentlichen ein Byte-Array. Stellen Sie sicher, dass die Zeichenfolge, die Sie in ein Byte-Array konvertieren, Base64-codiert ist. In Java könnte man so etwas machen.

String key = "random_secret_key"; 
String base64Key = DatatypeConverter.printBase64Binary(key.getBytes()); 
byte[] secretBytes = DatatypeConverter.parseBase64Binary(base64Key); 
Verwandte Themen