Anropa en Microsoft Graph API via en agent med hjälp av .NET

Den här artikeln beskriver hur du anropar en Microsoft-Graph API från en agent med hjälp av agentidentiteter eller en agent användarkonto.

Om du vill anropa ett API från en agent måste du hämta en åtkomsttoken som agenten kan använda för att autentisera sig själv till API:et. Vi rekommenderar att du använder Microsoft. Identity.Web SDK för .NET för att anropa dina webb-API:er. Det här SDK:t förenklar processen för att hämta och validera token. För andra språk använder du Microsoft Entra agent-SDK för agent-ID.

Förutsättningar

  • En agentidentitet med lämpliga behörigheter för att anropa mål-API:et. Du behöver en användare för flödet 'on-behalf-of'.
  • En agents användarkonto med rätt behörighet att anropa mål-API:et.

Anropa Microsoft Graph API

  1. Installera Microsoft. Identity.Web.GraphServiceClient som hanterar autentisering för Graph SDK och Microsoft. Identity.Web.AgentIdentiteter paket för att lägga till stöd för agentidentiteter.

    dotnet add package Microsoft.Identity.Web.GraphServiceClient
    dotnet add package Microsoft.Identity.Web.AgentIdentities
    
  2. Lägg till stöd för Microsoft Graph- och agentidentiteter i din tjänstsamling.

    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. Konfigurera graph- och agentidentitetsalternativ i appsettings.json.

    Varning

    Klienthemligheter ska inte användas som klientautentiseringsuppgifter i produktionsmiljöer för agentidentitetsritningar på grund av säkerhetsrisker. Använd i stället säkrare autentiseringsmetoder som federerade autentiseringsuppgifter (FIC) med hanterade identiteter eller klientcertifikat. Dessa metoder ger förbättrad säkerhet genom att eliminera behovet av att lagra känsliga hemligheter direkt i programkonfigurationen.

    {
      "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. Nu kan du hämta GraphServiceClient genom att mata in den i din tjänst eller från tjänstleverantören och anropa Microsoft Graph.

  • För agentidentiteter kan du hämta antingen enbart apptoken (autonoma agenter) eller en token för användares räkning (interaktiva agenter) med hjälp av metoden WithAgentIdentity. För endast apptoken anger du RequestAppToken egenskapen till true. För delegerade token som används på användarens vägnar bör du inte ange egenskapen eller uttryckligen ange den till RequestAppToken.

    // 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 agentens användarkontoidentiteter kan du ange antingen användarens huvudnamn (UPN) eller objektidentitet (OID) för att identifiera agentens användarkonto med hjälp WithAgentUserIdentity av metoden.

      // 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)));