如何访问控制器中的 oauth2 不透明令牌

时间:2021-06-24 15:36:16

标签: spring spring-security spring-security-oauth2 okta

我有一个使用 OKTA 进行身份验证的 API。我需要 opaque token 以便我可以代表用户访问 OKTA API。我如何才能访问控制器中的不透明令牌?

1 个答案:

答案 0 :(得分:0)

我找到了 this

我创建了这个 ExchangeFilterFunction:

private ExchangeFilterFunction myExchangeFilterFunction(OAuth2AuthorizedClientService clientService) {
    return new ExchangeFilterFunction() {
        @Override
        public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

            OAuth2AuthenticationToken oauthToken = (OAuth2AuthenticationToken) authentication;

            OAuth2AuthorizedClient client = clientService.loadAuthorizedClient(
                    oauthToken.getAuthorizedClientRegistrationId(),
                    oauthToken.getName());

            String accessToken = client.getAccessToken().getTokenValue();

            ClientRequest newRequest = ClientRequest.from(request)
                    .headers((headers) -> headers.setBearerAuth(accessToken))
                    .build();

            return next.exchange(newRequest);
        }
    };
}