【问题标题】:AccessTokens returned for Active Directory are different between sample projects示例项目之间为 Active Directory 返回的 AccessToken 不同
【发布时间】:2018-10-05 02:05:54
【问题描述】:

我一直在使用两个示例项目来试验用于 Java 的 Azure Active Directory 访问:

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

2) https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-active-directory-spring-boot-backend-sample 用于 spring-boot 嵌入式容器

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

在这两种情况下,我都通过使用我的 Azure 凭据登录来获得 AD 的 OAuth 令牌。 在 Http 响应中,我得到了以下形式的授权代码:

AQABAAIAAAD.....

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

我通过以下调用获得了 AuthenticationResult:

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

在Adal4j项目(一)中,AuthenticationResult的AccessToken是这样的:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6I...

我可以在 HTTP 调用中将其用作承载令牌,以通过 https://graph.windows.net/myorganization/me/thumbnailPhoto?api-version=1.6 检索用户的个人资料图片

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

AQABAAAAAADXzZ3ifr-GRbDT....

如果我以完全相同的方式使用它来尝试检索用户的个人资料图片,我会收到 401 Unauthorized 响应

这些AccessToken的形式和用途不同的原因是什么?

【问题讨论】:

  • 也许第二个令牌是 Microsoft Graph API?
  • 尝试使用jwt.iojwt.ms 等工具以解码格式查看这些令牌,它可能会更清楚地说明差异..
  • 你有关于这个 SO 线程的任何更新吗?

标签: java azure spring-boot active-directory azure-active-directory


【解决方案1】:

这些AccessToken的形式和用途不同的原因是什么?

我假设您获得的访问令牌是 authorization_code 而不是不记名令牌。

正如 Rohit Saigal 提到的,您可以使用 JWT.IOJWT.MS 来检查。

如果我们想获取 Azure AD 图形的访问令牌,我们可以使用以下代码来做到这一点。

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

如果您拥有相应的权限,我们可以使用访问令牌访问 Azure AD 图形 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多