如何在authenticationsuccesshandler上访问oauth2accesstokenresponse?

mhd8tkvw  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(484)

我目前已经用google和discord实现了oauth2登录序列。我注意到 OAuth2AccessTokenResponseClient 按照预期处理访问令牌、刷新令牌和openid令牌(我在调试时看到了它们)。
但是,在授权过程结束时,当它关闭SuckeHandler时,令牌已经消失。在做了一些研究之后,似乎 OAuth2LoginAuthenticationFilter (spring安全源代码)转换 OAuth2LoginAuthenticationToken (持有代币的)放入 OAuth2AuthenticationToken . 在此转换过程中,令牌实际上会丢失。
如何使访问令牌和刷新令牌在中可用 Authentication 中的对象 AuthenticationSuccessHandler 方法?我能换个过滤器吗?

ljsrvy3e

ljsrvy3e1#

我完全忽略了一个细节:
这个 OAuth2LoginAuthenticationFilterOAuth2AutherizedClient (带代币)在 OAuth2AuthorizedClientRepository .
在success handler中,您现在要做的就是获取提供者的客户端注册id,瞧:

private void onAuthenticationSuccess(HttpServletRequest request,
                                         HttpServletResponse response,
                                         Authentication authentication) throws IOException {

        OAuth2AuthenticationToken auth = (OAuth2AuthenticationToken) authentication;

        OAuth2AuthorizedClient authorizedClient = authorizedClientRepository.loadAuthorizedClient(auth.getAuthorizedClientRegistrationId(), authentication, request);

        // A happy guy with his access tokens and refresh tokens
    }

相关问题