Прочитать на английском Изменить

Поделиться через

Создание приложений Java с применением Microsoft Graph

Добавление проверки подлинности пользователя

В этом разделе описано, как расширить приложение из предыдущего упражнения для поддержки проверки подлинности с помощью Azure AD. Это необходимо для получения необходимого маркера доступа OAuth для вызова Microsoft Graph. На этом шаге вы интегрируете клиентную библиотеку удостоверений Azure для Java в приложение и настроите проверку подлинности для пакета SDK Microsoft Graph для Java.

Библиотека удостоверений Azure предоставляет ряд классов, которые реализуют потоки маркеров TokenCredential OAuth2. Клиентская библиотека Microsoft Graph использует эти классы для проверки подлинности вызовов Microsoft Graph.

Настройка клиента Graph для проверки подлинности пользователей

В этом разделе вы будете DeviceCodeCredential использовать класс для запроса маркера доступа с помощью потока кода устройства.

  1. Создайте новый файл в каталоге ./app/src/main/java/graphtutorialс именем Graph.java и добавьте в этот файл следующий код.

    package graphtutorial;
    
    import java.util.List;
    import java.util.Properties;
    import java.util.function.Consumer;
    
    import com.azure.core.credential.AccessToken;
    import com.azure.core.credential.TokenRequestContext;
    import com.azure.identity.DeviceCodeCredential;
    import com.azure.identity.DeviceCodeCredentialBuilder;
    import com.azure.identity.DeviceCodeInfo;
    import com.microsoft.graph.models.BodyType;
    import com.microsoft.graph.models.EmailAddress;
    import com.microsoft.graph.models.ItemBody;
    import com.microsoft.graph.models.Message;
    import com.microsoft.graph.models.MessageCollectionResponse;
    import com.microsoft.graph.models.Recipient;
    import com.microsoft.graph.models.User;
    import com.microsoft.graph.serviceclient.GraphServiceClient;
    import com.microsoft.graph.users.item.sendmail.SendMailPostRequestBody;
    
  2. Добавьте пустое определение класса Graph .

    public class Graph {
    }
    
  3. Добавьте следующий код в класс Graph.

    private static Properties _properties;
    private static DeviceCodeCredential _deviceCodeCredential;
    private static GraphServiceClient _userClient;
    
    public static void initializeGraphForUserAuth(Properties properties, Consumer<DeviceCodeInfo> challenge) throws Exception {
        // Ensure properties isn't null
        if (properties == null) {
            throw new Exception("Properties cannot be null");
        }
    
        _properties = properties;
    
        final String clientId = properties.getProperty("app.clientId");
        final String tenantId = properties.getProperty("app.tenantId");
        final String[] graphUserScopes = properties.getProperty("app.graphUserScopes").split(",");
    
        _deviceCodeCredential = new DeviceCodeCredentialBuilder()
            .clientId(clientId)
            .tenantId(tenantId)
            .challengeConsumer(challenge)
            .build();
    
        _userClient = new GraphServiceClient(_deviceCodeCredential, graphUserScopes);
    }
    
  4. Замените пустую initializeGraph функцию в App.java следующей.

    private static void initializeGraph(Properties properties) {
        try {
            Graph.initializeGraphForUserAuth(properties,
                challenge -> System.out.println(challenge.getMessage()));
        } catch (Exception e)
        {
            System.out.println("Error initializing Graph for user auth");
            System.out.println(e.getMessage());
        }
    }
    

Этот код объявляет два частных свойства: DeviceCodeCredential объект и GraphServiceClient объект . Функция InitializeGraphForUserAuth создает новый экземпляр DeviceCodeCredential, а затем использует его для создания нового экземпляра GraphServiceClient. Каждый раз, когда вызов API выполняется в Microsoft Graph через _userClient, он будет использовать предоставленные учетные данные для получения маркера доступа.

Тестирование DeviceCodeCredential

Затем добавьте код для получения маркера доступа из DeviceCodeCredential.

  1. Добавьте к классу Graph следующую функцию:

    public static String getUserToken() throws Exception {
        // Ensure credential isn't null
        if (_deviceCodeCredential == null) {
            throw new Exception("Graph has not been initialized for user auth");
        }
    
        final String[] graphUserScopes = _properties.getProperty("app.graphUserScopes").split(",");
    
        final TokenRequestContext context = new TokenRequestContext();
        context.addScopes(graphUserScopes);
    
        final AccessToken token = _deviceCodeCredential.getTokenSync(context);
        return token.getToken();
    }
    
  2. Замените пустую displayAccessToken функцию в App.java следующей.

    private static void displayAccessToken() {
        try {
            final String accessToken = Graph.getUserToken();
            System.out.println("Access token: " + accessToken);
        } catch (Exception e) {
            System.out.println("Error getting access token");
            System.out.println(e.getMessage());
        }
    }
    
  3. Выполните сборку и запуск приложения. Введите 1 при появлении запроса на выбор параметра. Приложение отображает URL-адрес и код устройства.

    Java Graph Tutorial
    
    Please choose one of the following options:
    0. Exit
    1. Display access token
    2. List my inbox
    3. Send mail
    4. Make a Graph call
    1
    To sign in, use a web browser to open the page https://microsoft.com/devicelogin and
    enter the code RB2RUD56D to authenticate.
    
  4. Откройте браузер и перейдите по url-адресу. Введите предоставленный код и войдите в систему.

    Важно!

    Помните о всех существующих учетных записях Microsoft 365, которые вошли в браузер при просмотре страницы https://microsoft.com/devicelogin. Используйте функции браузера, такие как профили, гостевой режим или частный режим, чтобы проверить подлинность в качестве учетной записи, которую вы планируете использовать для тестирования.

  5. После завершения вернитесь к приложению, чтобы увидеть маркер доступа.

    Совет

    Только для проверки и отладки можно декодировать маркеры доступа пользователей (только для рабочих или учебных учетных записей) с помощью средства синтаксического анализа токенов Майкрософт в сети по адресу https://jwt.ms. Это может быть полезно, если при вызове Microsoft Graph возникают ошибки маркера. Например, убедитесь, что scp утверждение в маркере содержит ожидаемые области разрешений Microsoft Graph.