Библиотека проверки подлинности Active Directory для Java (ADAL4J) позволяет выполнять проверку подлинности через доступ в API Microsoft Graph, используя следующий (упрощенный) код:
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
, которое вызывает описанный выше метод authenticate()
, действительно работает, например. он перечисляет содержимое корневого каталога, используя /me/drive/root/children
в качестве пути REST.
Однако если используется токен доступа, возвращаемый методом authenticate()
, OneDrive
возвращает ошибку. Удаление имени пользователя (me
) из пути возвращает только 1 имя файла, если вместо common
в авторизацииUrl используется конкретный идентификатор арендатора.
Кажется, что нет способа добавить значение области действия в ADAL4J
, а многочисленные другие варианты приводят либо к ошибке, либо к возврату 1 файла (вероятно, из другого контекста).
Есть ли способ получить полностью авторизованный токен доступа через ADAL4J для OneDrive?