Java Azure Spring启动-获取登录用户的OAuth 2.0访问令牌

Java Azure Spring启动-获取登录用户的OAuth 2.0访问令牌,java,spring,azure,spring-boot,oauth-2.0,Java,Spring,Azure,Spring Boot,Oauth 2.0,我使用azure active directory spring boot starter来保护spring boot应用程序中的端点。这可以正常工作-当用户访问我的应用程序时,他们会被重定向到Azure登录,然后被定向回我的应用程序。在我的控制器中,我可以访问OAuth2AuthenticationToken来获取登录用户的信息,只需将其添加为方法参数并让spring注入即可 @RestController public class SomeController { @GetMapp

我使用azure active directory spring boot starter来保护spring boot应用程序中的端点。这可以正常工作-当用户访问我的应用程序时,他们会被重定向到Azure登录,然后被定向回我的应用程序。在我的控制器中,我可以访问
OAuth2AuthenticationToken
来获取登录用户的信息,只需将其添加为方法参数并让spring注入即可

@RestController
public class SomeController {

    @GetMapping("/something")
    public Object getSomething(final OAuth2AuthenticationToken authToken) {
        final Map<String, Object> attributes = authToken.getPrincipal().getAttributes();
    }

}

如何在我的控制器中检索已登录用户的OAuth 2访问令牌?

您可以通过以下方式获取访问令牌:

@GetMapping("/")
public String index(Model model, OAuth2AuthenticationToken authentication) {
    final OAuth2AuthorizedClient authorizedClient =
            this.authorizedClientService.loadAuthorizedClient(
                    authentication.getAuthorizedClientRegistrationId(),
                    authentication.getName());
    String accessToken=authorizedClient.getAccessToken().getTokenValue();
    System.out.println(accessToken);
    model.addAttribute("userName", authentication.getName());
    return "index";
}

关于完整的示例,您可以参考。

我还没有时间尝试这个。我最终只是使用idToken从Azure Graph API请求一个新的代表令牌。不过,这可能效果更好。将在我有时间尝试后继续。这确实返回
id\u令牌
,而不是在Graph API上执行其他调用所需的访问令牌。“ID令牌应用于验证用户是否是他们声称的用户,并获取有关他们的其他有用信息-不应使用它代替访问令牌进行授权。”
@GetMapping("/")
public String index(Model model, OAuth2AuthenticationToken authentication) {
    final OAuth2AuthorizedClient authorizedClient =
            this.authorizedClientService.loadAuthorizedClient(
                    authentication.getAuthorizedClientRegistrationId(),
                    authentication.getName());
    String accessToken=authorizedClient.getAccessToken().getTokenValue();
    System.out.println(accessToken);
    model.addAttribute("userName", authentication.getName());
    return "index";
}