Compartir a través de


Adición de autenticación solo de aplicación a aplicaciones typeScript para Microsoft Graph

En este artículo, agregará autenticación solo de aplicación a la aplicación que creó en Compilación de aplicaciones typeScript con Microsoft Graph y autenticación solo de aplicación.

La biblioteca cliente de Azure Identity para JavaScript proporciona muchas TokenCredential clases que implementan flujos de token de OAuth2. La biblioteca cliente de JavaScript de Microsoft Graph usa esas clases para autenticar llamadas a Microsoft Graph.

Configuración del cliente de Graph para la autenticación solo de la aplicación

En esta sección, usará la ClientSecretCredential clase para solicitar un token de acceso mediante el flujo de credenciales de cliente.

  1. Abra graphHelper.ts y agregue el código siguiente.

    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';
    
    import { AppSettings } from './appSettings';
    
    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. Reemplace la función vacía initializeGraph de index.ts por lo siguiente.

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

Este código declara dos propiedades privadas, un ClientSecretCredential objeto y un Client objeto . La InitializeGraphForAppOnlyAuth función crea una nueva instancia de ClientSecretCredentialy, a continuación, usa esa instancia para crear una nueva instancia de Client. Cada vez que se realiza una llamada API a Microsoft Graph a través de _appClient, usa la credencial proporcionada para obtener un token de acceso.

Prueba de ClientSecretCredential

A continuación, agregue código para obtener un token de acceso de ClientSecretCredential.

  1. Agregue la siguiente función a 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. Reemplace la función vacía displayAccessTokenAsync de index.ts por lo siguiente.

    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. Ejecute el siguiente comando en la CLI en la raíz del proyecto.

    npx ts-node index.ts
    
  4. Escriba 1 cuando se le solicite una opción. La aplicación muestra un token de acceso.

    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...
    

    Sugerencia

    Solo con fines de validación y depuración, puede descodificar tokens de acceso de solo aplicación mediante el analizador de tokens en línea de Microsoft en https://jwt.ms. El análisis del token puede ser útil si se producen errores de token al llamar a Microsoft Graph. Por ejemplo, comprobar que la role notificación del token contiene los ámbitos de permiso de Microsoft Graph esperados.

Paso siguiente