Невозможно получить доступ к пользовательскому устройству в 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;
}

Есть что-то, что я пропускаю? Спасибо!

1 ответ

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

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

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

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

Спасибо

Питер

Другие вопросы по тегам