2016-03-04 14 views

答えて

7

JWTオブジェクトBase64URLがエンコードされています。つまり、ヘッダーとペイロードを手動でBase64URLでデコードすることで、常にヘッダーとペイロードを読み取ることができます。この場合、単にexp属性を無視します。

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 

、出力は次のとおりです:

あなたは、この(私はビルトイン Base64クラスJava8を使用していますが、あなたは、このような Apache Commons Codecなど任意の外部ライブラリを、使用することができます)のように行うことができます。例えば

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

expの属性は1300819380に設定されており、これは16 january 2016に対応しています。

7

これを行うより良い方法があります。 JWT Exceptionハンドラオブジェクトが表示されている場合など。 ExpiredJwtException、expectionオブジェクト自体には次のものが含まれています。 ヘッダー、クレーム、およびメッセージ

したがって、このオブジェクトを通じてクレームを簡単に抽出できます。e.getClaims().getId()ここでeはExpiredJwtExceptionオブジェクトです。

ExpiredJwtExceptionのconsturctは以下の通りである: -

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

例: -

try{ 
     // executable code 
    }catch(ExpiredJwtException e){ 
     System.out.println("token expired for id : " + e.getClaims().getId()); 
    } 
関連する問題