Freigeben über


Aufrufen einer Microsoft Graph-API von einem Agent mithilfe von .NET

In diesem Artikel wird erläutert, wie Sie eine Microsoft Graph-API von einem Agent mithilfe von Agentidentitäten oder dem Benutzerkonto eines Agents aufrufen.

Um eine API von einem Agent aufzurufen, müssen Sie ein Zugriffstoken abrufen, das der Agent verwenden kann, um sich selbst bei der API zu authentifizieren. Wir empfehlen die Verwendung des Microsoft.Identity.Web SDK für .NET zum Aufrufen Ihrer Web-APIs. Dieses SDK vereinfacht den Prozess des Abrufens und Validierens von Token. Verwenden Sie für andere Sprachen das Microsoft Entra-Agent-SDK für die Agent-ID.

Voraussetzungen

  • Eine Agentidentität mit entsprechenden Berechtigungen zum Aufrufen der Ziel-API. Sie benötigen einen Benutzer für den On-Behalf-of-Flow.
  • Das Benutzerkonto eines Agents mit den entsprechenden Berechtigungen zum Aufrufen der Ziel-API.

Aufrufen einer Microsoft Graph-API

  1. Installieren Sie den Microsoft.Identity.Web.GraphServiceClient , der die Authentifizierung für das Graph SDK und das Microsoft.Identity.Web.AgentIdentities-Paket verarbeitet, um Unterstützung für Agentidentitäten hinzuzufügen.

    dotnet add package Microsoft.Identity.Web.GraphServiceClient
    dotnet add package Microsoft.Identity.Web.AgentIdentities
    
  2. Fügen Sie die Unterstützung für Microsoft Graph- und Agentidentitäten in Ihrer Dienstsammlung hinzu.

    using Microsoft.Identity.Web;
    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add authentication (web app or web API)
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
        .EnableTokenAcquisitionToCallDownstreamApi()
        .AddInMemoryTokenCaches();
    
    // Add Microsoft Graph support
    builder.Services.AddMicrosoftGraph();
    
    // Add Agent Identities support
    builder.Services.AddAgentIdentities();
    
    var app = builder.Build();
    app.UseAuthentication();
    app.UseAuthorization();
    app.Run();
    
  3. Konfigurieren Von Graph- und Agent-Identitätsoptionen in appsettings.json.

    Warnung

    Geheime Clientschlüssel sollten aufgrund von Sicherheitsrisiken nicht als Clientanmeldeinformationen in Produktionsumgebungen für Agentidentitäts-Blueprints verwendet werden. Verwenden Sie stattdessen sicherere Authentifizierungsmethoden wie Verbundidentitätsanmeldeinformationen (FIC) mit verwalteten Identitäten oder Clientzertifikaten. Diese Methoden bieten eine verbesserte Sicherheit, da vertrauliche geheime Schlüssel nicht direkt in Ihrer Anwendungskonfiguration gespeichert werden müssen.

    {
      "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "<my-test-tenant>",
        "ClientId": "<agent-blueprint-client-id>",
        "ClientCredentials": [
          {
            "SourceType": "ClientSecret",
            "ClientSecret": "your-client-secret"
          }
        ]
      },
      "DownstreamApis": {
        "MicrosoftGraph": {
          "BaseUrl": "https://graph.microsoft.com/v1.0",
          "Scopes": ["User.Read", "User.ReadBasic.All"]
        }
      }
    }
    
  4. Sie können nun das GraphServiceClient in Ihren Dienst injizieren oder es vom Dienstanbieter abrufen und Microsoft Graph aufrufen.

  • Bei Agentidentitäten können Sie entweder ein Nur-App-Token (autonome Agents) oder ein Benutzertoken (interaktive Agents) mithilfe der WithAgentIdentity Methode erwerben. Legen Sie für Nur-App-Token die RequestAppToken Eigenschaft auf true. Für im Auftrag eines Benutzers delegierte Token legen Sie die RequestAppToken Eigenschaft nicht fest oder legen Sie sie explizit auf false.

    // Get the GraphServiceClient
    GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
    
    string agentIdentity = "agent-identity-guid";
    
    // Call Microsoft Graph APIs with the agent identity for app only scenario
    var applications = await graphServiceClient.Applications
        .GetAsync(r => r.Options.WithAuthenticationOptions(options =>
        {
            options.WithAgentIdentity(agentIdentity);
            options.RequestAppToken = true; // Set to true for app only
        }));
    
    // Call Microsoft Graph APIs with the agent identity for on-behalf of user scenario
    var applications = await graphServiceClient.Applications
        .GetAsync(r => r.Options.WithAuthenticationOptions(options =>
        {
            options.WithAgentIdentity(agentIdentity);
            options.RequestAppToken = false; // False to show it's on-behalf of user
        }));
    
    • Für die Benutzerkontoidentitäten des Agents können Sie entweder den Benutzerprinzipalnamen (User Principal Name, UPN) oder die Objektidentität (Object Identity, OID) angeben, um das Benutzerkonto des Agents mithilfe der WithAgentUserIdentity Methode zu identifizieren.

      // Get the GraphServiceClient
      GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
      
      string agentIdentity = "agent-identity-guid";
      
      // Call Microsoft Graph APIs with the agent's user account identity using UPN
      string userUpn = "user-upn";
      var me = await graphServiceClient.Me
          .GetAsync(r => r.Options.WithAuthenticationOptions(options =>
              options.WithAgentUserIdentity(agentIdentity, userUpn)));
      
      // Or using OID
      string userOid = "user-object-id";
      var me = await graphServiceClient.Me
          .GetAsync(r => r.Options.WithAuthenticationOptions(options =>
              options.WithAgentUserIdentity(agentIdentity, userOid)));