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


Добавление проверки подлинности только для приложений в приложения TypeScript для Microsoft Graph

В этой статье вы добавите проверку подлинности только для приложений в приложение, созданное в разделе Создание приложений TypeScript с помощью Microsoft Graph и проверки подлинности только для приложений.

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

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

В этом разделе вы используете ClientSecretCredential класс для запроса маркера доступа с помощью потока учетных данных клиента.

  1. Откройте graphHelper.ts и добавьте следующий код.

    import 'isomorphic-fetch';
    import { ClientSecretCredential } from '@azure/identity';
    import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
    // prettier-ignore
    import { TokenCredentialAuthenticationProvider } from
      '@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials/index.js';
    
    import { AppSettings } from './appSettings.js';
    
    let _settings: AppSettings | undefined = undefined;
    let _clientSecretCredential: ClientSecretCredential | undefined = undefined;
    let _appClient: Client | undefined = undefined;
    
    export function initializeGraphForAppOnlyAuth(settings: AppSettings) {
      // Ensure settings isn't null
      if (!settings) {
        throw new Error('Settings cannot be undefined');
      }
    
      _settings = settings;
    
      if (!_clientSecretCredential) {
        _clientSecretCredential = new ClientSecretCredential(
          _settings.tenantId,
          _settings.clientId,
          _settings.clientSecret,
        );
      }
    
      if (!_appClient) {
        const authProvider = new TokenCredentialAuthenticationProvider(
          _clientSecretCredential,
          {
            scopes: ['https://graph.microsoft.com/.default'],
          },
        );
    
        _appClient = Client.initWithMiddleware({
          authProvider: authProvider,
        });
      }
    }
    
  2. Замените пустую initializeGraph функцию в index.ts на следующую.

    function initializeGraph(settings: AppSettings) {
      graphHelper.initializeGraphForAppOnlyAuth(settings);
    }
    

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

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

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

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

    export async function getAppOnlyTokenAsync(): Promise<string> {
      // Ensure credential isn't undefined
      if (!_clientSecretCredential) {
        throw new Error('Graph has not been initialized for app-only auth');
      }
    
      // Request token with given scopes
      const response = await _clientSecretCredential.getToken([
        'https://graph.microsoft.com/.default',
      ]);
      return response.token;
    }
    
  2. Замените пустую displayAccessTokenAsync функцию в index.ts на следующую.

    async function displayAccessTokenAsync() {
      try {
        const userToken = await graphHelper.getAppOnlyTokenAsync();
        console.log(`App-only token: ${userToken}`);
      } catch (err) {
        console.log(`Error getting app-only access token: ${err}`);
      }
    }
    
  3. Выполните следующую команду в интерфейсе командной строки в корне проекта.

    npx ts-node index.ts
    
  4. Введите 1 при появлении запроса на выбор параметра. Приложение отображает маркер доступа.

    TypeScript Graph App-Only Tutorial
    
    [1] Display access token
    [2] List users
    [3] Make a Graph call
    [0] Exit
    
    Select an option [1...3 / 0]: 1
    App-only token: eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVDTzRYOWtKYlNLVjVkRzJGenJqd2xvVUcwWS...
    

    Совет

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

Следующее действие