Spring security Spring Security oauth2客户端-如何获取JWT令牌

Spring security Spring Security oauth2客户端-如何获取JWT令牌,spring-security,microsoft-graph-api,Spring Security,Microsoft Graph Api,我正在尝试使用spring-security-oauth2-client和spring-security-oauth2-jose对Azure AD进行身份验证并获取JWT令牌。 登录部分可以工作,但我收到的令牌不是JWT。以下是我的配置: 我得到一个不记名代币,看起来像: "在一份研究报告中,有一个研究发现了一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个

我正在尝试使用spring-security-oauth2-clientspring-security-oauth2-jose对Azure AD进行身份验证并获取JWT令牌。 登录部分可以工作,但我收到的令牌不是JWT。以下是我的配置:

我得到一个不记名代币,看起来像:

"在一份研究报告中,有一个研究发现了一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非3R61ADSNQEUE2i2.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 IOBFIP87Z72CS4NJLJM3X9_Qk9MQ5eGQTNj4fHCzJp9ukcjQ1MSUol_VIgAA "


然后被Microsoft Graph API拒绝。非常感谢您提供的任何帮助或建议。

我找到了解决方案。您得到的是返回的授权码。要获取访问令牌,请使用以下命令:

public void getToken(OAuth2AuthenticationToken oAuth2AuthenticationToken, @AuthenticationPrincipal(expression = "idToken") OidcIdToken idToken) {

System.out.println(idToken);

}

您还可以从身份验证对象获取id令牌。您需要将Authentication.principal强制转换为OidcUser。OidcUser为您提供用户的完整详细信息

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


    if (authentication.getPrincipal() instanceof OidcUser) {
            OidcUser principal = ((OidcUser) authentication.getPrincipal());
            idToken = principal.getIdToken().getTokenValue();
        }

您的持票人代币看起来不像
访问\u代币
。它看起来像
授权\u代币
。请验证一下。谢谢阿德尔,这正是我要找的。@EdouardZerbo:我需要完全相同的东西。但是我如何称呼这个方法?@AdelShahin:我也遇到了类似的问题。您能帮我找出区别吗
public void getToken(OAuth2AuthenticationToken oAuth2AuthenticationToken, @AuthenticationPrincipal(expression = "idToken") OidcIdToken idToken) {

System.out.println(idToken);

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


    if (authentication.getPrincipal() instanceof OidcUser) {
            OidcUser principal = ((OidcUser) authentication.getPrincipal());
            idToken = principal.getIdToken().getTokenValue();
        }