.NET kullanarak bir aracıdan Microsoft Graph API çağırma

Bu makalede, bir aracının kimlikleri veya kullanıcı hesabını kullanarak Microsoft Graph API çağırmanın nasıl yapılacağı açıklanmaktadır.

Bir aracıdan API çağırmak için, aracının API'de kimliğini doğrulamak için kullanabileceği bir erişim belirteci almanız gerekir. Microsoft.Identity.Web SDK'sını .NET için web API'lerinizi çağırmak üzere kullanmanızı öneririz. Bu SDK, belirteçleri alma ve doğrulama işlemini basitleştirir. Diğer diller için, aracı kimliği için Microsoft Entra aracı SDK'sını kullanın.

Önkoşullar

  • Hedef API'yi çağırmak için uygun izinlere sahip bir aracı kimliği. Akış adına işlem için bir kullanıcıya ihtiyacınız vardır.
  • Hedef API’yi çağırmak için uygun izinlere sahip bir ajanın kullanıcı hesabı.

Microsoft Graph API çağırma

  1. Microsoft.Identity.Web.GraphServiceClient'ı yükleyin, bu Graph SDK'sı için kimlik doğrulamayı gerçekleştirir ve aracı kimlikleri için destek eklemek amacıyla Microsoft.Identity.Web.AgentIdentities paketini yükleyin.

    dotnet add package Microsoft.Identity.Web.GraphServiceClient
    dotnet add package Microsoft.Identity.Web.AgentIdentities
    
  2. Hizmet koleksiyonunuza Microsoft Graph ve aracı kimlikleri desteğini ekleyin.

    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. appsettings.json'de Graph ve aracı kimliği seçeneklerini yapılandırın.

    Uyarı

    Güvenlik risklerinden dolayı istemci sırları, ajan kimlik planları için üretim ortamlarında istemci kimlik bilgileri olarak kullanılmamalıdır. Bunun yerine, yönetilen kimliklerle veya istemci sertifikalarıyla federasyon kimlik bilgileri (FIC) gibi daha güvenli kimlik doğrulama yöntemleri kullanın. Bu yöntemler, hassas gizli dizileri doğrudan uygulama yapılandırmanızda depolama gereksinimini ortadan kaldırarak gelişmiş güvenlik sağlar.

    {
      "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. Artık GraphServiceClient hizmetinize veya hizmet sağlayıcısından ekleyebilir ve Microsoft Graph çağırabilirsiniz.

  • Aracı kimlikleri için WithAgentIdentity yöntemini kullanarak yalnızca uygulama belirteci için bir belirteç (otonom aracılar) ya da kullanıcı adına bir belirteç (etkileşimli aracılar) alabilirsiniz. Yalnızca uygulama belirteçleri için RequestAppToken özelliğini true olarak ayarlayın. Kullanıcı adına belirteçler için, RequestAppToken özelliğini ayarlamayın veya false olarak açıkça ayarlayın.

    // 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
        }));
    
    • Aracının kullanıcı hesap kimlikleri için, WithAgentUserIdentity yöntemini kullanarak aracının kullanıcı hesabını tanımlamak adına Kullanıcı Asıl Adı (UPN) veya Nesne Kimliği (OID) belirtebilirsiniz.

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