2017-02-27 7 views
0

何かを見つけられなくてはなりません。私はJWTを作成するためにJJWTライブラリを使用しています。 JWTは、請求項のデータセットに応じてライブラリと矛盾して作成されます。私のコード:JWTの無効なJSONを作成しているJavaのjjwt

Date now = new Date(); 
Date expiration = new Date(now.getTime() + TimeUnit.MINUTES.toMillis(30)); 

Claims claims = Jwts.claims(); 

JSONObject jsonObject = new JSONObject(); 
jsonObject.put("serviceName1", "serviceStatus1"); 
jsonObject.put("serviceName2", "serviceStatus2"); 
claims.put("services",jsonObject); 

claims.setSubject("225544"); 
claims.setExpiration(expiration); 
claims.setId(UUID.randomUUID().toString()); 
claims.setIssuedAt(now); 

return Jwts.builder() 
    .setClaims(claims) 
    .signWith(SignatureAlgorithm.HS256, Base64.encodeBase64(secret.getBytes())) 
    .compact(); 

このコードはJWTを作成し、正しく署名します。ただし、ペイロードがデコードされるとき、ペイロード値は常に有効なJSONではありません。多くの場合、終了するのは閉鎖}が存在しないため、解析が失敗することがあります。 Subjectが8文字の場合、正常に動作します。長さが7文字または6文字の場合、無効なJSONです。または、クレームに他のタグを追加すると、それがうまく動作しないことがあります。私は何か間違っているのですか?

私もAuth0 java-JWTライブラリを使用してみましたが、同様の結果を得ました。ペイロードは常に有効なJSONではありません。代わりにJSONObject

+1

を試してみてください;'や 'Map'を使用しています。 –

+0

'JSONObject'にはどのライブラリを使用していますか?おそらくJSONオブジェクトを文字列にエンコードする際の問題です。 – pedrofb

+0

'.toString()'を実行しようとしても役に立たなかった。私はライブラリとしてnet.sf.json-libを使用しています。それ以上に戦うのではなく、手動でトークンを構築してライブラリで検証する方が簡単だと決めました。助けてくれてありがと – Niro

答えて

1

してくださいは、 `claims.put( "サービス"、jsonObject.toString())してみMap<String,String>

関連する問題