JWT obiekty są Base64URL zakodowane. Oznacza to, że zawsze można odczytać nagłówki i ładunek ręcznie poprzez dekodowanie Base64URL. W takim przypadku po prostu zignorujesz atrybut exp
.
Na przykład można zrobić tak (używam Java8 wbudowany Base64
klasy, ale można użyć dowolnej zewnętrznej biblioteki, takich jak 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
i wyjście to:
Headers: {"alg":"HS256","typ":"JWT","exp":"1300819380"}
Payload: {"sub":"1234567890","name":"John Doe","admin":true}
Należy również pamiętać, że atrybut exp
jest ustawiony na 1300819380
, co odpowiada 16 january 2016
.