Java的Active Directory 身份验证库(ADAL4J) 允许使用以下(简化的)代码通过访问令牌对Microsoft Graph API进行身份验证:
public String authenticate(String authorizationUrl, String clientId, String clientSecret) throws Exception {
ExecutorService service = Executors.newFixedThreadPool(1);
AuthenticationContext context = new AuthenticationContext(authorizationUrl, false, service);
ClientCredential credential = new ClientCredential(clientId, clientSecret);
Future<AuthenticationResult> future = context.acquireToken(“https://graph.microsoft.com”, credential, null);
return future.get().getAccessToken();
}
以上适用于 Graph 的某些部分(例如,用于访问Office 365
帐户),但不适用于OneDrive
,它返回没有适当授权的访问令牌。
通过POSTMAN获取访问令牌按预期工作,具有以下参数:
authorizationUrl: https://login.microsoftonline.com/common/oauth2/v2.0/authorize
accessTokenUrl: https://login.microsoftonline.com/common/oauth2/v2.0/token
clientId: <the clientId for the application>
clientSecret: <the clientSecret for the application>
scope: https://graph.microsoft.com/.default
state: <empty>
更具体地说,在POSTMAN中运行上述命令会返回一个具有附加范围的访问令牌,包括https://graph.microsoft.com/Files.ReadWrite.All
. Java
在调用上述方法的应用程序中使用该访问令牌确实有效,例如,它列出了用作 REST 路径authenticate()
的根目录的内容。/me/drive/root/children
但是,如果使用该authenticate()
方法返回的访问令牌,则会返回错误OneDrive
。me
如果使用特定租户 ID 而不是common
在 authorizationUrl 中,则从路径中删除用户名 ( ) 仅返回 1 个文件名。
似乎没有办法在其中添加范围值,ADAL4J
并且许多其他变体要么导致错误,要么导致返回 1 个文件(可能来自不同的上下文)。
有没有办法通过 ADAL4J 为 OneDrive 获取完全授权的访问令牌?