OK、JWTを生成するときにペイロードにいくつかのカスタムクレームを追加しています。フロントエンド(javascript)でそれらをうまく引き出すことができます。次に、JavaScriptにajax呼び出しをマイクロサービスに送信させ、JWTを一緒に渡します。マイクロサービスのJWTからカスタムクレームを取得したいと思います。私は次のことをしています:
Claims claims = Jwts.parser().setSigningKey(Vars.SECRET_KEY).parseClaimsJws(token).getBody();
User user = claims.get("customuser", User.class);
そしてそれは例外をスローします。
io.jsonwebtoken.RequiredTypeException: Expected value to be of type: class net.netdatacorp.netdauth.model.User, but was class java.util.LinkedHashMap
at io.jsonwebtoken.impl.DefaultClaims.get(DefaultClaims.java:128)
これが、私のカスタムクレームのフロントエンドのJWTインスペクターでのデータの外観です。
{
jti: "83bffbad-7d36-4370-9332-21a84f2a3dce",
iat: 1498241526,
sub: "test",
iss: "www.test.net",
customuser: {
userId: 1,
userCd: "TMM",
firstNm: "Testy",
lastNm: "McTesty",
userNm: "test",
emailAddress: "[email protected]",
active: true,
createdDt: 1491355712000,
createdByUserId: 0,
lastUpdateDt: 1498199278000,
lastUpdateByUserId: 0,
lastLoginDt: 1484928016000
}
}
カスタムクレームを引き出すために何が欠けていますか?
OK、それで私はJJWTの代わりにJose4Jを使用するように切り替えました、そしてすべてのものを機能させるために働いた後、私はおそらくJJWTで同様のことをすることができたかもしれないことに気づきました。したがって、私がやったことは、Gsonを使用してオブジェクトのJSONエンコーディングを実行し、結果のJSON文字列をクレームとして添付することでした。したがって、カスタムクレームを元に戻したい場合は、クレームを文字列として抽出し、Gsonライブラリを使用してPOJOに変換し直します。
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
JwtConsumer jwtConsumer = getConsumer();
JwtClaims jwtClaims = jwtConsumer.processToClaims(token);
String userStr = jwtClaims.getClaimValue("user", String.class);
User user = gson.fromJson(userStr, User.class);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加