私はSpring JWT認証アプリケーションを作成しました。 JWTにはいくつかのカスタムクレームが含まれています。リソースサーバー側では、これらの主張を収集して確認するためにJWTトークンをどこで解析する必要がありますか?コントローラーやフィルターでこれを行う必要がありますか?ベストプラクティスは何ですか?多分あなたはいくつかの例がありますか?Spring Framework - JWTのカスタムクレームの解析場所
2
A
答えて
3
Jackson Object MapperとSpring Securityクラスの組み合わせ、つまりJwt、JwtHelper、およびAuthenticationを使用できます。 Spring Securityの静的コンテキストオブジェクトを使用して認証を取得し、JwtHelperを使用して受け取ったトークンを解析することができます。
ObjectMapper objectMapper = new ObjectMapper();
Authentication authentication =
SecurityContextHolder.getContext().getAuthentication();
Map<String, Object> map =
objectMapper.convertValue(authentication.getDetails(), Map.class);
// create a token object to represent the token that is in use.
Jwt jwt = JwtHelper.decode((String) map.get("tokenValue"));
// jwt.getClaims() will return a JSON object of all the claims in your token
// Convert claims JSON object into a Map so we can get the value of a field
Map<String, Object> claims = objectMapper.readValue(jwt.getClaims(), Map.class);
String customField = (String) claims.get("you_custom_field_name");
上記のコードの3行目にデバッグしてブレークポイントを設定することをお勧めします。その時点で、認証オブジェクトを公開します。私はあなたが後で必要とするいくつかの有用な詳細を持っているかもしれません。
これはコントローラですべて実行できます。私はそうするためにフィルタを使用する方法がわかりません。
1
あなたもspringframework.boot.json.JsonParserを使用することができます。
JsonParser parser = JsonParserFactory.getJsonParser();
Map<String, ?> tokenData = parser.parseMap(JwtHelper.decode(token).getClaims());
> tokenData.get("VALID_KEY");
0
私はこの使用しています:
private Claim getClaim(String claimKey) {
Authentication token = SecurityContextHolder.getContext().getAuthentication();
try {
DecodedJWT jwt = JWT.decode(token.getCredentials().toString());
return jwt.getClaim(claimKey);
} catch (JWTVerificationException ex) {
ex.printStackTrace();
return null;
}
}
関連する問題
- 1. Pythonの場所解析エラー
- 2. JWTトークン解析
- 3. PHP _POSTの解析コードの場所
- 4. Jwtベアラ認証によるカスタムクレーム
- 5. xml解析メソッドを入れる場所
- 6. XML解析エラー:ルート要素は場所
- 7. Asp.net mvc 5;カスタムクレームを追加する場所(adfsログイン)
- 8. 解析テキスト私はこのような場所名解析する
- 9. .NET Framework 3.5の場所
- 10. .Net Frameworkドキュメンテーションの場所
- 11. Spring MVCのテンプレート場所
- 12. jwt - マイクロデバイスでのDjango-rest-framework-jwt認証
- 13. Tymon JWTでカスタムクレームを追加できません
- 14. ApostropheCMSで解析を追加するのに最適な場所
- 15. Googleの場所を解析する方法json
- 16. 構文解析場所の文字列 - MySQLクエリ
- 17. 正規表現 - クラスパスの場所を解析する
- 18. M3Uファイルの場所を完全修飾パスに解析する
- 19. JSON.net Compact FrameworkのISO8601日付の解析
- 20. サーバー上の場所のロギング - Robot Framework/CMD
- 21. JWT Springユーザーベースのアクセス
- 22. Zend Frameworkとzendライブラリの場所
- 23. Zend Frameworkのキャッシュ格納場所
- 24. C#アセンブリの場所解決
- 25. Django Rest Framework JWTユニットテスト
- 26. Spring + Oauth2 + JWT + Websocket
- 27. 大きなtxtファイルを解析する場所ASP.NET
- 28. 場所要素がスタックオーバーフロージョブから解析されないRSSフィード
- 29. WIF:カスタムクレーム
- 30. エラーのあるJSONの解析とエラーの表示場所の表示
を、あなたは、これらのカスタムクレームの目的について詳しく説明することはできますか?デフォルトでは、Spring Securityは権限や権限を設定し、メソッドとエンドポイントを@PreAuthorizeアノテーションで保護する権限を求めます。 –
JWTトークンのカスタムクレームは、あなたのアプリケーションに知られていなければなりません。理想的には、認証値を抽出してSpringセキュリティコンテキストで設定するのは、フィルタの一部である必要があります。どこから、Auth Managerがチェックすることになります。その後、@ punkrocker27kaが示唆したように、すべてのことをSpringセキュリティ自身で気にすることができます。私の実装を見てみましょう:https://github.com/deepak-java/jwt-spring-boot –
@ punkrocker27kaいくつかのビジネスロジックをカバーするカスタムクレームが必要ですが、デフォルトのクレームでは不十分です。 Deepak Singhが実装に感謝し、それが私を助けます! – dplesa