の有効期限が切れていると解釈しようとすると、JWT
が期限切れになります。期限切れのJWTトークンからクレームを解析する方法はありますか?
への道はありますか?JWTでも有効期限が切れています。以下は
はJavaでJWTを解析するために使用されます。
Jwts.parser().setSigningKey(secret.getBytes()).parseClaimsJws(token).getBody();
の有効期限が切れていると解釈しようとすると、JWT
が期限切れになります。期限切れのJWTトークンからクレームを解析する方法はありますか?
への道はありますか?JWTでも有効期限が切れています。以下は
はJavaでJWTを解析するために使用されます。
Jwts.parser().setSigningKey(secret.getBytes()).parseClaimsJws(token).getBody();
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
に対応しています。
これを行うより良い方法があります。 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());
}