web-dev-qa-db-ja.com

@Controllerで認証トークンを抽出する方法

OAuth 2.0と認証サーバーを使用するSpring Bootアプリがあります。保護されたページにアクセスしようとすると、認証サーバー(Blitzアイデンティティプロバイダー)のログインページにリダイレクトされました。私の問題は、@ Controller(保護されたページ)で認証トークンを抽出できないことです。このトークンを後で使用して、2番目のアプリケーションで認証します。

  • 試してみた これ (答えで)うまくいった、私はトークンを取り戻したが、ご覧のとおり、それはユーザー名とパスワードのパラメーターのハードコードであり、ログインを介したログインのようなものだ-私はしない(認証済みページで)もう一度ログインする必要があります。
  • authentication.getDetails()を出力しようとしましたが、トークンタイプと<TOKEN>のようなトークンを示していますが、それだけでは不十分です。
  • リクエストレスポンスヘッダーでトークンを検索しようとしましたが、見つかりませんでした。そのため、認証サーバーはそれをヘッダーで送信しません。

これは、私のコンテキストの一部を理解するのに役立つ2つのファイルです。

application.yml

server:
  port: 8080
  context-path: /
  session:
    cookie:
      name:FIRSTSESSION
security:
  basic:
    enabled: false
  oauth2:
    client:
      clientId: test_id
      clientSecret: f3M5m9a2Dn0v15l
      accessTokenUri: http://server:9000/blitz/oauth/te
      userAuthorizationUri: http://server:9000/blitz/oauth/ae?scope=test_scope
    resource:
      userInfoUri: http://server:9000/blitz/oauth/me
logging:
  level:
    org.springframework.security: DEBUG

SsoController.Java

@EnableOAuth2Sso
@Controller
public class SsoController {

    @RequestMapping("/secondService")
    public String getContent(HttpServletRequest request, Model model) {

        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        model.addAttribute("submittedValue", authentication.getDetails());
        return "secondService";
    } 
}

それで、あなたは何を提案できますか?この場合、どのように認証トークンを抽出できますか?

6
Artemoon

Oauth2承認/リソースサーバーを構成している場合は、以下のコードを試すことができます。

@Autowired
private TokenStore tokenStore;

@RequestMapping(method = {RequestMethod.POST, RequestMethod.GET}, value = "/oauth/me")
public Map<String, Object> userInfo(OAuth2Authentication auth){
    final OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) auth.getDetails();
    //token
    String accessToken = details.getTokenValue();
    //reference
    final OAuth2AccessToken accessToken = tokenStore.readAccessToken(details.getTokenValue());
   // clientid
    String clientId = auth.getOAuth2Request().getClientId();
}

それが役に立てば幸い!

5
Samir