如何使用代码授权流在spring应用程序中提取oauth2访问令牌?

mzmfm0qo  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(385)

我遵循了这个指南。
我有一个简单的OAuth2WebApp,使用代码授权流。我有一个@getmapping端点(根据教程),它返回从我正在使用的服务提供商检索到的用户信息。因为这样可以正确地将我的信息返回到webapp,所以我可以判断代码授权流是否有效。工作端点的代码:

@GetMapping("/user")
public Map<String, Object> user(@AuthenticationPrincipal OAuth2User principal) {
    return principal.getAttributes();
}

现在我想创建一个新的@getmapping,在这里我使用访问令牌查询刚刚授权我们的服务提供商的api。
问题是,上面的示例以某种方式神奇地仅基于配置向我发出请求,并且只返回用户信息。现在我想获取spring存储在某处的会话访问令牌,以访问api,但我喜欢“手动”。
如何在新的@getmapping中提取访问令牌?
我已经搜索了很多,但是我对oauth2和spring都是新手,而且有太多的spring课程和教程,以至于我“因为所有的树而看不到森林”。
我感谢任何帮助。干杯

bd1hkmkf

bd1hkmkf1#

我解决了。
添加以下内容:

@Autowired
private OAuth2AuthorizedClientService authorizedClientService;

private String getSessionBearerToken() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    OAuth2AuthenticationToken oauthToken = (OAuth2AuthenticationToken) authentication;
    OAuth2AuthorizedClient client =
            authorizedClientService.loadAuthorizedClient(
                    oauthToken.getAuthorizedClientRegistrationId(),
                    oauthToken.getName());
    return client.getAccessToken().getTokenValue();
}

当您调用此方法时,它将为您获取访问令牌。

相关问题