代码之家  ›  专栏  ›  技术社区  ›  Black

示例项目之间为Active Directory返回的AccessToken不同

  •  0
  • Black  · 技术社区  · 7 年前

    我一直在使用两个示例项目试验Azure Active Directory access for Java:

    1) https://github.com/AzureAD/azure-activedirectory-library-for-java 它使用OAuth令牌构建了一场独立的战争,以确保安全,以及

    https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-active-directory-spring-boot-backend-sample

    我在API的使用方式上遇到了很大的不同,我不理解。

    在Http响应中,我得到如下形式的授权代码:

    亚喀巴亚德。。。。。

    然后使用以下URL作为authContext: https://login.microsoftonline.com/ {tenantId}

    Future<AuthenticationResult> future = authContext.acquireTokenByAuthorizationCode(authorizationCode, redirectUri, credential, null);
    

    EYJ0EXAIIKv1QILCHbGCIOIJUZI1NIISING1DCI6I。。。

    https://graph.windows.net/myorganization/me/thumbnailPhoto?api-version=1.6

    而在SpringBoot AD示例中,从完全相同的调用返回的AccessToken的形式如下:

    AQABAAADXZZ3IFR GRbDT。。。。

    如果我以完全相同的方式使用它来检索用户的个人资料pic,我会得到401未经授权的响应

    这些AccessToken在形式和使用上存在差异的原因是什么?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tom Sun    7 年前

    这些AccessToken在形式和使用上存在差异的原因是什么?

    我想你得到的访问令牌是 授权代码 不是不记名代币。

    JWT.IO JWT.MS 检查一下。

    public String index(Model model, OAuth2AuthenticationToken authentication) {
    ...
    DefaultOidcUser user = (DefaultOidcUser)authentication.getPrincipal();
    String accessToken = user.getIdToken().getTokenValue(); 
    ...
    }