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
の
を試してみてください;'や 'Map'を使用しています。 –
'JSONObject'にはどのライブラリを使用していますか?おそらくJSONオブジェクトを文字列にエンコードする際の問題です。 – pedrofb
'.toString()'を実行しようとしても役に立たなかった。私はライブラリとしてnet.sf.json-libを使用しています。それ以上に戦うのではなく、手動でトークンを構築してライブラリで検証する方が簡単だと決めました。助けてくれてありがと – Niro