2016-03-04 4 views

Antwort

7

JWT Objekte sind Base64URL codiert. Dies bedeutet, dass Sie Header und Payload immer manuell durch Base64URL-Decodierung lesen können. In diesem Fall ignorieren Sie einfach das Attribut exp.

Zum Beispiel Sie so tun können (ich verwende Java8 eingebaute in Base64 Klasse, aber Sie eine externe Bibliothek verwenden können, wie Apache Commons Codec):

Base64.Decoder decoder = Base64.getUrlDecoder(); 
String src = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImV4cCI6IjEzMDA4MTkzODAifQ.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.2GpoV9q_uguSg0Ku6peI5aZ2qBxO5qOA42zaS25gq_c"; 
String[] parts = src.split("\\."); // Splitting header, payload and signature 
System.out.println("Headers: "+new String(decoder.decode(parts[0]))); // Header 
System.out.println("Payload: "+new String(decoder.decode(parts[1]))); // Payload 

und der Ausgang ist:

Headers: {"alg":"HS256","typ":"JWT","exp":"1300819380"} 
Payload: {"sub":"1234567890","name":"John Doe","admin":true} 

Bitte beachten Sie auch, dass das Attribut exp auf 1300819380 gesetzt ist, was 16 january 2016 entspricht.

7

Es gibt einen besseren Ansatz, dies zu tun. Wenn Sie ein JWT Exception-Handler-Objekt z. ExpiredJwtException, expection Objekt selbst enthält folgende Komponenten: - Header, der Ansprüche und Nachricht

so Ansprüche durch dieses Objekt können leicht extrahiert d.h. e.getClaims().getId() wobei e ExpiredJwtException Objekt ist.

ExpiredJwtException consturct ist wie folgt: -

public ExpiredJwtException(Header header, Claims claims, String message) { 
     super(header, claims, message); 
} 

Beispiel: -

try{ 
     // executable code 
    }catch(ExpiredJwtException e){ 
     System.out.println("token expired for id : " + e.getClaims().getId()); 
    } 
Verwandte Themen