我一直在使用两个示例项目尝试Java的Azure Active Directory访问:
1)https://github.com/AzureAD/azure-activedirectory-library-for-java,它使用OAuth令牌建立了独立的战争来确保安全性,并且
我无法理解API的使用方式上的差异。
在这两种情况下,我都使用Azure凭据登录获得了用于AD的OAuth令牌。 在Http响应中,我得到以下形式的authorizationCode:
AQABAAIAAAD .....
然后使用以下URL作为authContext: https://login.microsoftonline.com/ {tenantId}
我通过以下调用获得AuthenticationResult:
Future<AuthenticationResult> future = authContext.acquireTokenByAuthorizationCode(authorizationCode, redirectUri, credential, null);
在Adal4j项目(1)中,AuthenticationResult的AccessToken的格式为:
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6I ...
我可以在HTTP调用中用作承载令牌,以通过https://graph.windows.net/myorganization/me/thumbnailPhoto?api-version=1.6
检索用户的个人资料图片在SpringBoot AD示例中,从完全相同的调用返回的AccessToken的形式为:
AQABAAAAAADXzZ3ifr-GRbDT ....
如果我使用完全相同的方法来尝试检索用户的个人资料图片,则会收到401未经授权的回复
这些AccessToken的形式和使用不同的原因是什么?
答案 0 :(得分:0)
这些AccessToken的形式和使用不同的原因是什么?
我假设您获得的访问令牌是 authorization_code ,而不是承载令牌。
正如Rohit Saigal提到的那样,您可以使用JWT.IO或JWT.MS进行检查。
如果要获取Azure AD图的访问令牌,可以使用以下代码来实现。
public String index(Model model, OAuth2AuthenticationToken authentication) {
...
DefaultOidcUser user = (DefaultOidcUser)authentication.getPrincipal();
String accessToken = user.getIdToken().getTokenValue();
...
}
然后,如果您具有相应的权限,我们可以使用访问令牌来访问Azure AD图形api。