Ошибка проверки токена доступа API Microsoft Graph (java)

Я пытаюсь настроить собственное Java-приложение, которое будет использовать API MS Graph для доступа к OneDrive пользователей после аутентификации с использованием ADAL4j. Я использую эту библиотеку для получения токена доступа. Пока у меня есть этот код:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import javax.naming.ServiceUnavailableException;

import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;

public class Get {

    private final static String AUTHORITY = "https://login.windows.net/common/oauth2/v2.0/authorize";
    private final static String CLIENT_ID = "29275...011a";
    private final static String RESOURCE = "https://graph.windows.net";


    public static void main(String[] args) throws Exception {

        try (BufferedReader br = new BufferedReader(new InputStreamReader(
            System.in))) {
            System.out.print("Enter username: ");
            String username = br.readLine();
            System.out.print("Enter password: ");
            String password = br.readLine();

            AuthenticationResult result = getAccessTokenFromUserCredentials(
                username, password);
            System.out.println("Access Token - " + result.getAccessToken());
            System.out.println("Refresh Token - " + result.getRefreshToken());
            System.out.println("ID Token - " + result.getIdToken());
            System.out.println("Expires in - " + result.getExpiresAfter());
        }
    }

    private static AuthenticationResult getAccessTokenFromUserCredentials(
        String username, String password) throws Exception {
        AuthenticationContext context = null;
        AuthenticationResult result = null;
        ExecutorService service = null;
        try {
            service = Executors.newFixedThreadPool(1);
            context = new AuthenticationContext(AUTHORITY, false, service);
            Future<AuthenticationResult> future = context.acquireToken(RESOURCE, CLIENT_ID, username, password, null);
            result = future.get();
        } finally {
            service.shutdown();
        }

        if (result == null) {
            throw new ServiceUnavailableException(
                "authentication result was null");
        }
        return result;
    }

}

Когда я запускаю его, я ввожу учетные данные учетной записи, затем печатаются токен доступа, токен обновления, токен идентификатора и срок действия. Затем я использую надстройку Chromes «Advanced Rest Client», чтобы проверить токен аутентификации (снимок экрана ниже).

скриншот

И затем я получаю ошибку проверки токена доступа, показанную в нижней части снимка экрана. Я не понимаю, почему токен не работает. У меня настроены разрешения для приложения, зарегистрированного в Azure AD, и пользователь уже предоставил разрешение приложению. Единственное, о чем я могу думать, это то, что, возможно, области действия не указаны, но я не уверен, что проблема в этом. И если да, то как их указать?


person code monkey    schedule 26.07.2017    source источник
comment
Привет, я пытаюсь разработать приложение с поддержкой OneDrive, используя Graph API в Java. Вы нашли SDK для этого?   -  person cyberjoac    schedule 26.09.2017
comment
Существует один элемент аутентификации (который выполняется через azure), называемый adal4j, исходный код здесь. Что касается взаимодействия с OneDrive, графа на данный момент нет. В итоге я использовал встроенные библиотеки java.net для выполнения http-вызовов на график.   -  person code monkey    schedule 27.09.2017


Ответы (1)


Я нашел проблему.

Неверный URI ресурса. API Graph Azure AD — это https://graph.windows.net.

URI ресурса Microsoft Graph API: https://graph.microsoft.com/.

person code monkey    schedule 26.07.2017