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

Neste artigo, vai adicionar a autenticação apenas de aplicação à aplicação que criou na compilação de aplicações .NET com o Microsoft Graph e a autenticação apenas de aplicações.

A biblioteca de cliente da Identidade do Azure para .NET fornece muitas TokenCredential classes que implementam fluxos de tokens OAuth2. A biblioteca de cliente .NET 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. Crie um novo ficheiro no diretório GraphTutorial com o nome GraphHelper.cs e adicione o seguinte código a esse ficheiro.

    using Azure.Core;
    using Azure.Identity;
    using Microsoft.Graph;
    using Microsoft.Graph.Models;
    
    class GraphHelper
    {
    }
    
  2. Adicione o seguinte código à classe GraphHelper.

    // Settings object
    private static Settings? settings;
    
    // App-ony auth token credential
    private static ClientSecretCredential? clientSecretCredential;
    
    // Client configured with app-only authentication
    private static GraphServiceClient? appClient;
    
    public static void InitializeGraphForAppOnlyAuth(Settings settings)
    {
        GraphHelper.settings = settings;
    
        // Ensure settings isn't null
        _ = settings ??
            throw new NullReferenceException("Settings cannot be null");
    
        GraphHelper.settings = settings;
    
        clientSecretCredential ??= new ClientSecretCredential(
                GraphHelper.settings.TenantId, GraphHelper.settings.ClientId, GraphHelper.settings.ClientSecret);
    
        appClient ??= new GraphServiceClient(
                clientSecretCredential,
                /* Use the default scope, which will request the scopes
                   configured on the app registration */
                ["https://graph.microsoft.com/.default"]);
    }
    
  3. Substitua a função empty InitializeGraph no Program.cs pelo seguinte.

    void InitializeGraph(Settings settings)
    {
        GraphHelper.InitializeGraphForAppOnlyAuth(settings);
    }
    

Este código declara duas propriedades privadas, um ClientSecretCredential objeto e um GraphServiceClient 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 GraphServiceClient. 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 função a seguir à classe GraphHelper.

    public static async Task<string> GetAppOnlyTokenAsync()
    {
        // Ensure credential isn't null
        _ = clientSecretCredential ??
            throw new NullReferenceException("Graph has not been initialized for app-only auth");
    
        // Request token with given scopes
        var context = new TokenRequestContext(["https://graph.microsoft.com/.default"]);
        var response = await clientSecretCredential.GetTokenAsync(context);
        return response.Token;
    }
    
  2. Substitua a função empty DisplayAccessTokenAsync no Program.cs pelo seguinte.

    async Task DisplayAccessTokenAsync()
    {
        try
        {
            var appOnlyToken = await GraphHelper.GetAppOnlyTokenAsync();
            Console.WriteLine($"App-only token: {appOnlyToken}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error getting app-only access token: {ex.Message}");
        }
    }
    
  3. Crie e execute a aplicação. Introduza 1 quando lhe for pedida uma opção. A aplicação apresenta um token de acesso.

    .NET Graph Tutorial
    
    Please choose one of the following options:
    0. Exit
    1. Display access token
    2. List users
    3. Make a Graph call
    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