2016-06-14 2 views
0

, also arbeite ich mit einem RESTful Webservice von Drittanbietern, wo ich mich authentifizieren muss, indem ich ein JWT anfordere und es allen weiteren Anfragen zur Verfügung stelle. Ich mache das, indem ich einfach meinen Benutzernamen und mein Passwort posten und ein Token dafür erhalte. Ich kenne weder das Geheimnis, das zum Erstellen des Tokens verwendet wurde, noch irgendetwas anderes außer Benutzername und Passwort.So extrahieren/dekodieren Sie die Ablaufzeit von extern ausgegebenen Json Web Token

Jetzt möchte ich die Ablaufzeit der JWT überprüfen, bevor ich sie für nachfolgende Webservice-Anfragen wiederverwende oder sie einfach aktualisiere. Ich weiß, dass ich es einfach benutzen könnte und eine Art Ausnahme für den Ablauf von Ausfällen bekommen würde, aber das würde ich lieber nicht tun.

Ich habe versucht, dieses Tutorial zu folgen: [https://stormpath.com/blog/token-auth-for-java]

aber an der Stelle stecken, wo ich Signaturschlüssel zur Verfügung stellen muß.

Wie würde ich das tun, da ich nicht das Geheimnis habe, um es zu verschlüsseln.

Tschüss übrigens: Ich arbeite mit groovy und wslite auf diesem.

Antwort

1

Sie sollten nur in der Lage sein, den Körper des Tokens zu nehmen und es zu dekodieren.

Der private Schlüssel wird nicht verwendet, um den Körper eines JWT zu verschlüsseln, es ist nur die Unterschrift zu erzeugen, verwendet ...

in Groovy So können Sie gerade tun:

// A JWT from the link you gave above 
String key = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJleHAiOjEzMDA4MTkzODAsInN1YiI6InVzZXJzLzg5ODM0NjIiLCJzY29wZSI6InNlbGYgYXBpL2J1eSJ9.43DXvhrwMGeLLlP4P4izjgsBB2yrpo82oiUPhADakLs' 

// Just the body (middle section) 
String body = key.split(/\./)[1] 

// Un base64 it (using the Java 8 Base64 class) 
String unencoded = new String(Base64.decoder.decode(body), 'UTF-8') 

// Parse the json into a map 
Map data = new groovy.json.JsonSlurper().parseText(unencoded) 

// Get the expiry 
long exp = data.exp 

assert exp == 1300819380 

Of Natürlich, es gibt nichts zu sagen, dass der Körper des Token muss jede Form von Ablaufzeit für Sie zu betrachten ... Es könnte nur eine interne ID sein

+0

Ich werde das versuchen, sobald ich aus meinem Urlaub zurück bin. Falls es keine Ablaufinfo gibt, wie würden Sie damit umgehen? –

+0

Wenn sie Ihnen nicht sagen, wann sie abläuft, müssen Sie die Ablaufausnahme abfangen, erneut validieren und es erneut versuchen –

0

Wenn Sie die Chiffre, die zum Kodieren verwendet wird, nicht kennen und ihre Chiffre nicht knacken möchten, können Sie keine Informationen aus dem Token entschlüsseln. Es gibt nichts wie "Standardinformationen, die in Token kodiert werden müssen", es besteht keine Notwendigkeit für das Token, dass es überhaupt chiffrierte Informationen enthalten sollte, es könnte nur eine zufällig generierte UUID sein, die auf ihrer Seite in der DB gespeichert ist Du kannst es überhaupt nicht entschlüsseln.

+0

Aber Sie haben Recht, dass das Token keine Informationen haben muss wie eine Ablaufzeit –

+0

@tim_yates Also Ihrer Meinung nach Base64 Codierung ist nicht eine Form der Verschlüsselung? –

+0

Ja, genau so ist eine Caesar-Chiffre. Aber Sie sagten _ "Wenn Sie die Chiffre nicht wissen ..." _ Aber natürlich kennen Sie die _ "Chiffre" _ ... Es ist Base64 codiert, genau wie es in [Abschnitt 3 der Spezifikation] (https : //tools.ietf.org/html/rfc7519#section-3) –

Verwandte Themen