Не удается получить доступ к пользовательскому устройству в Microsoft Intune с помощью Microsoft Graph API

Я пытаюсь получить доступ к управляемым устройствам для определенного пользователя. Я написал код, который использует веб-приложение для получения кода аутентификации. Я могу видеть всех пользователей, а также конкретного пользователя. Но когда я пытаюсь получить доступ к управляемым устройствам для пользователя, я получаю 401 несанкционированную ошибку. Я проверил, что все разрешения предоставлены веб-приложению, созданному на портале Azure для Microsoft Graph. Вот мой код: -

try {
    String access_token = getAccessToken();
    String url_str = "https://graph.microsoft.com/v1.0/users/{user name here}/managedDevices/";

    url = new URL(url_str);
    con = ( HttpURLConnection )url.openConnection();
    con.setDoInput(true);
    con.setDoOutput(true);
    con.setUseCaches(false);
    con.setRequestMethod("GET");
    con.setRequestProperty("Authorization", access_token);
    con.setRequestProperty("Accept","application/json");
    con.connect();

    br = new BufferedReader(new InputStreamReader( con.getInputStream() ));
    String str = null;
    String line;
    while((line = br.readLine()) != null) {
        str += line;
    }
    System.out.println(str);
} catch (Exception e) {
    e.printStackTrace();
}

Код получения токена: -

private String getAccessToken() {
    String accessToken = "";
    try {
        ExecutorService service = Executors.newFixedThreadPool(1); 
        String authorization_url = "https://login.microsoftonline.com/" + Authentication_Constants.TENANT + "/oauth2/authorize/";
        AuthenticationContext authContext = new AuthenticationContext(authorization_url, false, service);
        ClientCredential clientCred = new ClientCredential(Authentication_Constants.CLIENTID, Authentication_Constants.SECRET);
        Future<AuthenticationResult>  future = authContext.acquireToken(Authentication_Constants.RESOURCE, clientCred, null);
        AuthenticationResult authResult = future.get();
        accessToken = authResult.getAccessToken();
    } catch (Exception ex) {
        System.out.println(ex.getLocalizedMessage());
    }
    return accessToken;
}

Есть ли что-то, что мне не хватает? Спасибо!


person Batman22    schedule 16.02.2018    source источник
comment
Можете ли вы предоставить содержимое вашего токена доступа и пример того, как вы извлекаете этот токен?   -  person Marc LaFleur    schedule 16.02.2018
comment
@MarcLaFleur-MSFT Я предоставил код для получения токена. токен доступа слишком велик, чтобы добавить его сюда   -  person Batman22    schedule 17.02.2018


Ответы (1)


Я работаю в команде Microsoft Intune, особенно над интеграцией между Microsoft Intune и Microsoft Graph.

Судя по внешнему виду приведенного выше кода, похоже, что вы пытаетесь использовать учетные данные только для приложений для доступа к API, на данный момент API-интерфейсы Microsoft Intune поддерживают только использование учетных данных приложения и пользователя (т. е. делегированные разрешения). Чтобы получить доступ к этим API, вам необходимо пройти аутентификацию в качестве пользователя.

Если вы посмотрите на Справочник по разрешениям Microsoft Graph для Intune все разрешения перечислены как делегированные разрешения, для которых требуются учетные данные приложения и пользователя.

Если вам нужен доступ только для приложений к API Intune, я бы рекомендовал добавить комментарии к вашему сценарию на сайт отзывов Microsoft Intune в разделе этот элемент.

Спасибо

Питер

person Peter Richards - MSFT    schedule 26.02.2018
comment
developer.microsoft.com/en-us/graph/docs/concepts/ Я использую следующий URL-адрес, по которому администратор дает согласие на мое приложение. Это нормально? если нет, укажите мне ссылку для правильной аутентификации графа для доступа к Intune API. Спасибо! - person Batman22; 06.03.2018