Aracılığıyla paylaş


Microsoft Graph'a güvenli bir uygulamadan uygulama olarak erişme

Azure Uygulaması Hizmetinde çalışan bir web uygulamasından Microsoft Graph'a erişmeyi öğrenin.

Diagram that shows accessing Microsoft Graph.

Web uygulaması için Microsoft Graph'ı çağırmak istiyorsunuz. Web uygulamanıza verilere erişim vermenin güvenli bir yolu, sistem tarafından atanan yönetilen kimliği kullanmaktır. Microsoft Entra Id'den yönetilen kimlik, App Service'in uygulama kimlik bilgilerine gerek kalmadan rol tabanlı erişim denetimi (RBAC) aracılığıyla kaynaklara erişmesini sağlar. Web uygulamanıza yönetilen kimlik atadıktan sonra Azure, sertifika oluşturma ve dağıtma işlemleriyle ilgilenir. Gizli dizileri veya uygulama kimlik bilgilerini yönetme konusunda endişelenmeniz gerekmez.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Bir web uygulamasında sistem tarafından atanan yönetilen kimlik oluşturma.
  • Yönetilen kimliğe Microsoft Graph API izinleri ekleyin.
  • Yönetilen kimlikleri kullanarak bir web uygulamasından Microsoft Graph'ı çağırabilirsiniz.

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Önkoşullar

  • App Service kimlik doğrulaması/yetkilendirme modülü etkinleştirilmiş Azure Uygulaması Hizmeti üzerinde çalışan bir web uygulaması.

Uygulamada yönetilen kimliği etkinleştirme

Web uygulamanızı Visual Studio aracılığıyla oluşturur ve yayımlarsanız, yönetilen kimlik uygulamanızda sizin için etkinleştirilmiştir. App Service'inizde sol bölmede Kimlik'i ve ardından Sistem atanmış'ı seçin. Durum'un Açık olarak ayarlandığını doğrulayın. Aksi takdirde Kaydet'i seçin ve ardından Sistem tarafından atanan yönetilen kimliği etkinleştirmek için Evet'i seçin. Yönetilen kimlik etkinleştirildiğinde, durum Açık olarak ayarlanır ve nesne kimliği kullanılabilir.

Sonraki adımda ihtiyacınız olacak Nesne Kimliği değerini not alın.

Screenshot that shows the system-assigned identity.

Microsoft Graph'a erişim izni verme

Microsoft Graph'a erişirken, yönetilen kimliğin gerçekleştirmek istediği işlem için uygun izinlere sahip olması gerekir. Şu anda Bu tür izinleri Microsoft Entra yönetim merkezi aracılığıyla atama seçeneği yoktur. Aşağıdaki betik, istenen Microsoft Graph API izinlerini yönetilen kimlik hizmeti sorumlusu nesnesine ekler.

# Install the module.
# Install-Module Microsoft.Graph -Scope CurrentUser

# The tenant ID
$TenantId = "00001111-aaaa-2222-bbbb-3333cccc4444"

# The name of your web app, which has a managed identity.
$webAppName = "SecureWebApp-20201106120003" 
$resourceGroupName = "SecureWebApp-20201106120003ResourceGroup"

# The name of the app role that the managed identity should be assigned to.
$appRoleName = "User.Read.All"

# Get the web app's managed identity's object ID.
Connect-AzAccount -Tenant $TenantId
$managedIdentityObjectId = (Get-AzWebApp -ResourceGroupName $resourceGroupName -Name $webAppName).identity.principalid

Connect-MgGraph -TenantId $TenantId -Scopes 'Application.Read.All','AppRoleAssignment.ReadWrite.All'

# Get Microsoft Graph app's service principal and app role.
$serverApplicationName = "Microsoft Graph"
$serverServicePrincipal = (Get-MgServicePrincipal -Filter "DisplayName eq '$serverApplicationName'")
$serverServicePrincipalObjectId = $serverServicePrincipal.Id

$appRoleId = ($serverServicePrincipal.AppRoles | Where-Object {$_.Value -eq $appRoleName }).Id

# Assign the managed identity access to the app role.
New-MgServicePrincipalAppRoleAssignment `
    -ServicePrincipalId $managedIdentityObjectId `
    -PrincipalId $managedIdentityObjectId `
    -ResourceId $serverServicePrincipalObjectId `
    -AppRoleId $appRoleId

Betiği yürüttükten sonra, Microsoft Entra yönetim merkezinde istenen API izinlerinin yönetilen kimliğe atandığını doğrulayabilirsiniz.

Uygulamalar'a gidin ve Kurumsal uygulamalar'ı seçin. Bu bölmede kiracınızdaki tüm hizmet sorumluları görüntülenir. "Uygulama türü == Yönetilen Kimlikler" için bir filtre ekleyin ve yönetilen kimlik için hizmet sorumlusunu seçin.

Bu öğreticiyi takip ediyorsanız, aynı görünen ada sahip iki hizmet sorumlusu vardır (örneğin SecureWebApp2020094113531). Giriş sayfası URL'sine sahip hizmet sorumlusu, kiracınızdaki web uygulamasını temsil eder. Yönetilen Kimlikler'de görüntülenen hizmet sorumlusunun listede bir Giriş Sayfası URL'si olmamalıdır ve Nesne Kimliği, önceki adımda yönetilen kimliğin nesne kimliği değeriyle eşleşmelidir.

Yönetilen kimlik için hizmet sorumlusunu seçin.

Screenshot that shows the All applications option.

Genel Bakış'ta İzinler'i seçtiğinizde Microsoft Graph için eklenen izinleri görürsünüz.

Screenshot that shows the Permissions pane.

Microsoft Graph'ı arayın

ChainedTokenCredential, ManagedIdentityCredential ve EnvironmentCredential sınıfları, Microsoft Graph'a yönelik istekleri yetkilendirmek üzere kodunuz için belirteç kimlik bilgilerini almak için kullanılır. Belirteçleri getirmek ve bunları hizmet istemcisine eklemek için App Service ortamındaki yönetilen kimliği veya geliştirme ortamı değişkenlerini kullanan ChainedTokenCredential sınıfının bir örneğini oluşturun. Aşağıdaki kod örneği, kimliği doğrulanmış belirteç kimlik bilgilerini alır ve bunu kullanarak gruptaki kullanıcıları alan bir hizmet istemci nesnesi oluşturur.

Bu kodu örnek bir uygulamanın parçası olarak görmek için GitHub'da örneğe bakın.

Microsoft.Identity.Web.GraphServiceClient istemci kitaplığı paketini yükleme

.NET komut satırı arabirimini (CLI) veya Visual Studio'daki Paket Yöneticisi Konsolu'nu kullanarak projenize Microsoft.Graph ve Microsoft.Identity.Web.GraphServiceClient NuGet paketlerini yükleyin.

.NET CLI

Bir komut satırı açın ve proje dosyanızı içeren dizine geçin.

Yükleme komutlarını çalıştırın.

dotnet add package Microsoft.Identity.Web.GraphServiceClient
dotnet add package Microsoft.Graph

Paket Yöneticisi Konsolu

Visual Studio'da projeyi/çözümü açın ve Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu komutunu kullanarak konsolu açın.

Yükleme komutlarını çalıştırın.

Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Graph

Örnek

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using Microsoft.Graph;
using Azure.Identity;

...

public IList<MSGraphUser> Users { get; set; }

public async Task OnGetAsync()
{
    // Create the Graph service client with a ChainedTokenCredential which gets an access
    // token using the available Managed Identity or environment variables if running
    // in development.
    var credential = new ChainedTokenCredential(
        new ManagedIdentityCredential(),
        new EnvironmentCredential());

    string[] scopes = new[] { "https://graph.microsoft.com/.default" };

    var graphServiceClient = new GraphServiceClient(
        credential, scopes);

    List<MSGraphUser> msGraphUsers = new List<MSGraphUser>();
    try
    {
        //var users = await graphServiceClient.Users.Request().GetAsync();
        var users = await graphServiceClient.Users.GetAsync();
        foreach (var u in users.Value)
        {
            MSGraphUser user = new MSGraphUser();
            user.userPrincipalName = u.UserPrincipalName;
            user.displayName = u.DisplayName;
            user.mail = u.Mail;
            user.jobTitle = u.JobTitle;

            msGraphUsers.Add(user);
        }
    }
    catch (Exception ex)
    {
        string msg = ex.Message;
    }

    Users = msGraphUsers;
}

Kaynakları temizleme

Bu öğreticiyi tamamladıysanız ve artık web uygulamasına veya ilişkili kaynaklara ihtiyacınız yoksa, oluşturduğunuz kaynakları temizleyin.

Sonraki adımlar

Kaynakları temizleme)