Compartilhar via


Adicionar autenticação apenas de aplicação a aplicações TypeScript para o Microsoft Graph

Neste artigo, vai adicionar a autenticação apenas de aplicação à aplicação que criou em Criar aplicações TypeScript com o Microsoft Graph e autenticação apenas de aplicações.

A biblioteca de cliente da Identidade do Azure para JavaScript fornece muitas TokenCredential classes que implementam fluxos de tokens OAuth2. A biblioteca de cliente JavaScript do Microsoft Graph utiliza essas classes para autenticar chamadas para o Microsoft Graph.

Configurar o cliente do Graph para autenticação apenas de aplicações

Nesta secção, vai utilizar a ClientSecretCredential classe para pedir um token de acesso com o fluxo de credenciais de cliente.

  1. Abra graphHelper.ts e adicione o seguinte código.

    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. Substitua a função empty initializeGraph no index.ts pelo seguinte.

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

Este código declara duas propriedades privadas, um ClientSecretCredential objeto e um Client objeto. A InitializeGraphForAppOnlyAuth função cria uma nova instância de ClientSecretCredentiale, em seguida, utiliza essa instância para criar uma nova instância de Client. Sempre que é efetuada uma chamada à API ao Microsoft Graph através do _appClient, utiliza a credencial fornecida para obter um token de acesso.

Testar o ClientSecretCredential

Em seguida, adicione código para obter um token de acesso a ClientSecretCredentialpartir do .

  1. Adicione a seguinte função ao 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. Substitua a função empty displayAccessTokenAsync no index.ts pelo seguinte.

    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. Execute o seguinte comando na CLI na raiz do projeto.

    npx ts-node index.ts
    
  4. Introduza 1 quando lhe for pedida uma opção. A aplicação apresenta um token de acesso.

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

    Dica

    Apenas para fins de validação e depuração, pode descodificar tokens de acesso apenas de aplicações com o analisador de tokens online da Microsoft em https://jwt.ms. Analisar o token pode ser útil se encontrar erros de token ao chamar o Microsoft Graph. Por exemplo, verificar se a role afirmação no token contém os âmbitos de permissão esperados do Microsoft Graph.

Próxima etapa