私はREST APIをSpring Bootで実装しており、JWTとOauth 2。
認証とアクセストークンの生成に問題はありません。
ユーザーがリクエストを行ったとき、コントローラーからJWTトークンにアクセスしたい。
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth) {
logger.info("CREDENTIALS:" + auth.getCredentials().toString());
logger.info("PRINCIPAL:" + auth.getPrincipal().toString());
logger.info("OAuth2Request:" + auth.getOAuth2Request());
logger.info("UserAuthentication:" + auth.getUserAuthentication());
return userService.findAllUsers();
}
上記のようなものを試しましたが、トークンに到達できませんでした。ユーザー名しか取得できません。 Spring Bootでこれを達成する方法はありますか?
任意の助けいただければ幸いです。
タルタル、
UIはリクエストのヘッダーとしてトークンを送信していますか?その場合は、メソッドで@RequestHeaderアノテーションを使用してその値を取得できます
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth, @RequestHeader (name="Authorization") String token)
注:この例では、「Authorization」はトークンを含むヘッダー名ですが、これはカスタムヘッダー名の場合もあります。
乾杯!
カールが提供する答えはあなたの問題を解決するはずです。
その答えに加えて、次の方法を使用して、コードの任意の場所でトークンにアクセスできます
public static String getToken() {
String token = null;
var authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
}
return token;
}