web-dev-qa-db-ja.com

Spring Boot Rest ControllerからJWTトークンにアクセスする

私は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でこれを達成する方法はありますか?

任意の助けいただければ幸いです。

3
Tartar

タルタル、

UIはリクエストのヘッダーとしてトークンを送信していますか?その場合は、メソッドで@RequestHeaderアノテーションを使用してその値を取得できます

@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth, @RequestHeader (name="Authorization") String token) 

注:この例では、「Authorization」はトークンを含むヘッダー名ですが、これはカスタムヘッダー名の場合もあります。

乾杯!

10
Karl

カールが提供する答えはあなたの問題を解決するはずです。

その答えに加えて、次の方法を使用して、コードの任意の場所でトークンにアクセスできます

public static String getToken() {
    String token = null;
    var authentication = SecurityContextHolder.getContext().getAuthentication();
    if (authentication != null) {
      token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
    }
    return token;
  }
10
Abhijay