2016-07-08 75 views
2

我正在servlet上使用jjwt Java庫進行jwt的服務器端生成,直接從jjwt GitHub頁面https://github.com/jwtk/jjwt下面的代碼snipper生成並打印出此令牌。使用Java生成的JJWT簽名在jwt.io調試器上失敗

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.XIKER3owR8BS3Krhsksg9INh9VBSejdn_qN-ONtPans 
String compactJws = Jwts.builder() 
     .setSubject("Joe") 
     .signWith(SignatureAlgorithm.HS256, "secret") 
     .compact(); 
    PrintWriter out = response.getWriter(); 
    out.println(compactJws); 

然而,當我試圖覈實jwt.io的調試器這個令牌,失敗簽名檢查。 Both checking and unchecking secret base64 encoded didn't work

我錯誤地使用庫嗎?

回答

1

嘗試用secr和檢查的base64選項:)

正是由於.signWith(SignatureAlgorithm.HS256, "secret")。它是由DefaultJwtBuilder

public JwtBuilder signWith(SignatureAlgorithm alg, String base64EncodedSecretKey) 

實施此方法假定你是用base64提供密鑰和secret不BASE64。當該方法解碼從base64byte[]jjwt使用的Java轉換器提供了字符串secr這是在使用JavaScript的解碼器不同的表示jwt.io

可以與

System.out.println(
       javax.xml.bind.DatatypeConverter.printBase64Binary(
         javax.xml.bind.DatatypeConverter.parseBase64Binary("secret"))); 
測試自己
相關問題