Microsoft Graph API,使用ADAL4J

时间:2018-08-02 18:42:14

标签: java azure-active-directory azure-ad-graph-api adal4j

我正在尝试创建一个简单的应用程序,该应用程序允许我列出和编辑Azure Active Directory上的用户帐户。

这些用户已通过Azure AD B2C添加到目录中。

我跟踪了一些示例,经过几个小时的研究,我想出了一段简单的代码,尝试从Azure AD获取令牌,并使用该令牌尝试查询Graph API以获取用户列表

我看过的样品是:

https://github.com/AzureAD/azure-activedirectory-library-for-java

https://github.com/Azure-Samples/active-directory-java-native-headless

还有图书馆WIKI

https://github.com/AzureAD/azure-activedirectory-library-for-java/wiki

但是由于某种原因,我从azure收到401未经身份验证的状态代码,并显示以下错误消息:

{'odata.error':{'code':'Authentication_MissingOrMalformed','message':{'lang':'en','value':'Access Token missing or malformed.'},'date':'2018-08-02T18:39:48','requestId':'7ddb7d55-2074-4124-9863-a19626a6b49f','values':null}}

即使发送授权标头也是如此。

一件事是,为了在Azure AD中对APP进行身份验证,我使用的是在Azure AD App注册中注册的APP。

我已经编译了具有所有要求的示例项目,可在github上找到

https://github.com/pedrorochaorg/Microsoft-ADAL-Sample

有人可以告诉我实现此目标的正确方法吗?

1 个答案:

答案 0 :(得分:1)

根据错误消息Authentication_MissingOrMalformed。您获得的访问令牌不适用于相应的资源。

根据您提到的代码,资源网址应为https://graph.windows.net而不是APP_ID_URL

 String resourceUrl = "https://graph.windows.net";
 Future<AuthenticationResult> result = context.acquireToken(
                resourceUrl,    
                new ClientCredential(APP_ID, APP_SECRET),
                null
        );

并且您正在使用Azure AD图形API。您只需要为 Azure Windows Azure Active Directory 设置权限,而不要忘记授予该权限。

后面的代码需要空格和标头Accept:application/json

conn.setRequestProperty("Accept","application/json");
conn.setRequestProperty("Authorization", result.get().getAccessTokenType() + " "+ result.get().getAccessToken());

测试结果:

enter image description here