Compartir a través de


Agregar autenticación solo de aplicación a aplicaciones .NET para Microsoft Graph

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

La biblioteca cliente de Azure Identity para .NET proporciona muchas TokenCredential clases que implementan flujos de token de OAuth2. La biblioteca cliente de .NET de Microsoft Graph usa esas clases para autenticar las 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. Cree un nuevo archivo en el directorio GraphTutorial denominado GraphHelper.cs y agregue el código siguiente a ese archivo.

    using Azure.Core;
    using Azure.Identity;
    using Microsoft.Graph;
    using Microsoft.Graph.Models;
    
    class GraphHelper
    {
    }
    
  2. Agregue el código siguiente a la clase 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)
    {
        _settings = settings;
    
        // Ensure settings isn't null
        _ = settings ??
            throw new System.NullReferenceException("Settings cannot be null");
    
        _settings = settings;
    
        if (_clientSecretCredential == null)
        {
            _clientSecretCredential = new ClientSecretCredential(
                _settings.TenantId, _settings.ClientId, _settings.ClientSecret);
        }
    
        if (_appClient == null)
        {
            _appClient = new GraphServiceClient(_clientSecretCredential,
                // Use the default scope, which will request the scopes
                // configured on the app registration
                new[] {"https://graph.microsoft.com/.default"});
        }
    }
    
  3. Reemplace la función vacía InitializeGraph en Program.cs por lo siguiente.

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

Este código declara dos propiedades privadas, un ClientSecretCredential objeto y un GraphServiceClient objeto . La InitializeGraphForAppOnlyAuth función crea una nueva instancia de ClientSecretCredentialy, a continuación, usa esa instancia para crear una nueva instancia de GraphServiceClient. 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 la clase GraphHelper.

    public static async Task<string> GetAppOnlyTokenAsync()
    {
        // Ensure credential isn't null
        _ = _clientSecretCredential ??
            throw new System.NullReferenceException("Graph has not been initialized for app-only auth");
    
        // Request token with given scopes
        var context = new TokenRequestContext(new[] {"https://graph.microsoft.com/.default"});
        var response = await _clientSecretCredential.GetTokenAsync(context);
        return response.Token;
    }
    
  2. Reemplace la función vacía DisplayAccessTokenAsync en Program.cs por lo siguiente.

    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. Compile y ejecute la aplicación. Escriba 1 cuando se le solicite una opción. La aplicación muestra un token de acceso.

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

    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