.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 Microsoft Entra ID Kimlik Doğrulama SDK'sını (sidecar) 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.AspNetCore.Authentication.OpenIdConnect;
    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": "<your-tenant-id>",
        "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"]
        }
      }
    }
    

    Note

    Yalnızca aracınızın ihtiyaç duyduğu Microsoft Graph izinlerini yapılandırın ve ayarladığınızın Scopes kod çağrılarınızın Graph kaynaklarıyla eşleştiğinden emin olun. Bu örneklerde ve User.ReadBasic.AllkullanılırUser.Read; diğer kaynakların çağrılması için bunlara karşılık gelen izinler gerekir.

  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.

    using Microsoft.Graph;
    using Microsoft.Identity.Web;
    
    // 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 usersAppOnly = await graphServiceClient.Users
        .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 usersOnBehalfOfUser = await graphServiceClient.Users
        .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.

      using Microsoft.Graph;
      using Microsoft.Identity.Web;
      
      // 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 meByOid = await graphServiceClient.Me
          .GetAsync(r => r.Options.WithAuthenticationOptions(options =>
              options.WithAgentUserIdentity(agentIdentity, userOid)));