2016-08-07 15 views
2

私はトークンに署名するたびにそれを解析し、署名例外を投げていないという問題に直面しています。JavaによるJWTトークン検証

あなたはキーがまだ私に適切な応答を与える異なっていることがわかります。

public class JwtUtil { 

public String parseToken(String token) { 
    try { 
     Jws<Claims> jwt = Jwts.parser()     
       .setSigningKey("[email protected]")      
       .parseClaimsJws(token); 


     System.out.println(jwt.getBody().getSubject()); 
     return "Valid"; 

    } catch (SignatureException jwtException) { 
     jwtException.printStackTrace(); 
     return null; 
    } 
} 


public String generateToken() { 

    Claims claim = Jwts.claims(); 
    claim.put("GivenName", "Johnny"); 
    claim.put("Surname", "Rocket"); 
    claim.put("Email", "[email protected]");  

    return Jwts.builder().setHeaderParam("typ", "JWT").setClaims(claim) 
      .setIssuer("Online JWT Builder") 
      .setAudience("www.example.com").setSubject("[email protected]") 
      .signWith(SignatureAlgorithm.HS256, "[email protected]").compact(); 


} 

public static void main(String[] args) { 
    JwtUtil jwtUtil = new JwtUtil();   
    String token = jwtUtil.generateToken(); 
    System.out.println(token); 

    JwtUtil jwtUtil1 = new JwtUtil(); 
    jwtUtil1.parseToken(token); 
} 
} 
+0

スローされます別のあなたが投稿することができますコンソール出力?また、 'setHeaderParam(" typ "、" JWT ")'を削除して、何か違いがあるかどうか確認してください。 – qwertz

+0

出力:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJHaXZlbk5hbWUiOiJKb2hubnkiLCJTdXJuYW1lIjoiUm9ja2V0IiwiRW1haWwiOiJqcm9ja2V0QGV4YW1wbGUuY29tIiwiaXNzIjoiT25saW5lIEpXVCBCdWlsZGVyIiwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSJ9.6rMHAdhvNyfe0Mqc6dgZ96QqEKzp4iEU3dle7eSIHMo私もヘッダを削除したが、同じ結果に – ashishl

答えて

1

本当に[email protected][email protected]はそれがJwtBuilder.signWith(SignatureAlgorithm alg, String base64EncodedSecretKey)によるものであるキー

同じです。あなたがbase64でキーを提供していて、あなたのキーがbase64ではないと仮定します。メソッドがbase64からbyte[]をデコードするとき、jjwtによって使用されるjavaコンバータは文字列の表現を提供します。 [email protected][email protected]バイト配列

でエンコードされますが(もっと)を試してみてください

System.out.println(
      javax.xml.bind.DatatypeConverter.printBase64Binary(
        javax.xml.bind.DatatypeConverter.parseBase64Binary("[email protected]"))); 
System.out.println(
      javax.xml.bind.DatatypeConverter.printBase64Binary(
        javax.xml.bind.DatatypeConverter.parseBase64Binary("[email protected]"))); 

を自分でテストすることができhttps://stackoverflow.com/a/38269014/6371459

を参照してくださいキーとSignatureException

+0

感謝を得ていたことで試してみましたが、私はそれのSecureRandom random1 =新しいのSecureRandom(「uwiueweuwiieuiuwiuiuewiiewiieuiew」のような私の静的キーとキーを生成することができます解決を得ました。 getBytes()); \t \t SecretKey key1 = MacProvider.generateKey(SignatureAlgorithm.HS512、random1); – ashishl

関連する問題