Öğretici: Evrensel Windows Platformu (UWP) uygulamasından Microsoft Graph API'sini çağırma

Bu öğreticide, kullanıcılarda oturum açıp Microsoft Graph API'sini çağırmak için erişim belirteci alan bir yerel Evrensel Windows Platformu (UWP) uygulaması oluşturacaksınız.

Bu kılavuzun sonunda, uygulamanız kişisel hesapları kullanarak korumalı bir API çağırır. Örnekler outlook.com, live.com ve diğerleridir. Uygulamanız, Microsoft Entra Id'ye sahip herhangi bir şirket veya kuruluştan iş ve okul hesaplarını da çağırır.

Bu öğreticide:

  • Visual Studio'da Evrensel Windows Platformu (UWP) projesi oluşturma
  • Uygulamayı Azure portalına kaydetme
  • Kullanıcı oturum açma ve oturum kapatmayı desteklemek için kod ekleme
  • Microsoft Graph API'sini çağırmak için kod ekleme
  • Uygulamayı test etme

Önkoşullar

Bu kılavuz nasıl çalışır?

Shows how the sample app generated by this tutorial works

Bu kılavuz, Microsoft Graph API'sini sorgulayan örnek bir UWP uygulaması oluşturur. Bu senaryo için, Yetkilendirme üst bilgisi kullanılarak HTTP isteklerine bir belirteç eklenir. Microsoft Kimlik Doğrulama Kitaplığı, belirteç alımlarını ve yenilemelerini işler.

NuGet paketleri

Bu kılavuzda aşağıdaki NuGet paketi kullanılır:

Kitaplık Açıklama
Microsoft.Identity.Client Microsoft Authentication Library
Microsoft.Graph Microsoft Graph İstemci Kitaplığı

Projenizi ayarlama

Bu bölümde, Bir Windows Masaüstü .NET uygulamasını (XAML) Microsoft ile oturum açma ile tümleştirmeye yönelik adım adım yönergeler sağlanır. Daha sonra uygulama, Microsoft Graph API'si gibi bir belirteç gerektiren web API'lerini sorgulayabilir.

Bu kılavuz, Microsoft Graph API'sini sorgulayan bir düğmeyi ve oturumu kapatma düğmesini görüntüleyen bir uygulama oluşturur. Ayrıca, çağrıların sonuçlarını içeren metin kutularını da görüntüler.

Bahşiş

Bu öğreticide oluşturduğunuz projenin tamamlanmış bir sürümünü görmek için GitHub'dan indirebilirsiniz.

Uygulamanızı oluşturma

  1. Visual Studio'yu açın ve Yeni proje oluştur'u seçin.

  2. Yeni proje oluştur bölümünde C# için Boş Uygulama (Evrensel Windows) seçeneğini belirleyin ve İleri'yi seçin.

  3. Yeni projenizi yapılandırın bölümünde uygulamayı adlandırın ve Oluştur'u seçin.

  4. İstenirse, Yeni Evrensel Windows Platformu Projesi'nde Hedef ve En Düşük sürümler için herhangi bir sürümü seçin ve tamam'ı seçin.

    Minimum and Target versions

Microsoft Kimlik Doğrulama Kitaplığı'nı projenize ekleme

  1. Visual Studio'da, Araçlar>NuGet Paket Yöneticisi>Paket Yönetici Konsolu'nu seçin.

  2. Aşağıdaki komutları kopyalayıp Paket Yöneticisi Konsolu penceresine yapıştırın:

    Install-Package Microsoft.Identity.Client
    Install-Package Microsoft.Graph
    

    Dekont

    İlk komut Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL.NET) yükler. MSAL.NET, Microsoft kimlik platformu tarafından korunan API'lere erişen kullanıcı belirteçlerini alır, önbelleğe alır ve yeniler. İkinci komut, Microsoft Graph isteklerinin kimliğini doğrulamak ve hizmete çağrı yapmak için Microsoft Graph .NET İstemci Kitaplığı'nı yükler.

Uygulamanızın kullanıcı arabirimini oluşturma

Visual Studio, proje şablonunuzun bir parçası olarak MainPage.xaml dosyasını oluşturur. Bu dosyayı açın ve uygulamanızın Kılavuz düğümünü aşağıdaki kodla değiştirin:

<Grid>
    <StackPanel Background="Azure">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Button x:Name="CallGraphButton" Content="Call Microsoft Graph API" HorizontalAlignment="Right" Padding="5" Click="CallGraphButton_Click" Margin="5" FontFamily="Segoe Ui"/>
            <Button x:Name="SignOutButton" Content="Sign-Out" HorizontalAlignment="Right" Padding="5" Click="SignOutButton_Click" Margin="5" Visibility="Collapsed" FontFamily="Segoe Ui"/>
        </StackPanel>
        <TextBlock Text="API Call Results" Margin="2,0,0,-5" FontFamily="Segoe Ui" />
        <TextBox x:Name="ResultText" TextWrapping="Wrap" MinHeight="120" Margin="5" FontFamily="Segoe Ui"/>
        <TextBlock Text="Token Info" Margin="2,0,0,-5" FontFamily="Segoe Ui" />
        <TextBox x:Name="TokenInfoText" TextWrapping="Wrap" MinHeight="70" Margin="5" FontFamily="Segoe Ui"/>
    </StackPanel>
</Grid>

Microsoft Graph API'sine belirteç almak için Microsoft Kimlik Doğrulama Kitaplığı'nı kullanma

Bu bölümde, Microsoft Graph API'sine belirteç almak için Microsoft Kimlik Doğrulama Kitaplığı'nın nasıl kullanılacağı gösterilmektedir. MainPage.xaml.cs dosyasında değişiklik yapın.

  1. MainPage.xaml.cs dosyasına aşağıdaki başvuruları ekleyin:

    using Microsoft.Identity.Client;
    using Microsoft.Graph;
    using Microsoft.Graph.Models;
    using System.Diagnostics;
    using System.Threading.Tasks;
    using System.Net.Http.Headers;
    
  2. sınıfınızı MainPage aşağıdaki kodla değiştirin:

    public sealed partial class MainPage : Page
    {
    
        //Set the scope for API call to user.read
        private string[] scopes = new string[] { "user.read" };
    
        // Below are the clientId (Application Id) of your app registration and the tenant information.
        // You have to replace:
        // - the content of ClientID with the Application Id for your app registration
        private const string ClientId = "[Application Id pasted from the application registration portal]";
    
        private const string Tenant = "common"; // Alternatively "[Enter your tenant, as obtained from the Azure portal, e.g. kko365.onmicrosoft.com]"
        private const string Authority = "https://login.microsoftonline.com/" + Tenant;
    
        // The MSAL Public client app
        private static IPublicClientApplication PublicClientApp;
    
        private static string MSGraphURL = "https://graph.microsoft.com/v1.0/";
        private static AuthenticationResult authResult;
    
        public MainPage()
        {
            this.InitializeComponent();
        }
    
        /// <summary>
        /// Call AcquireTokenAsync - to acquire a token requiring user to sign in
        /// </summary>
        private async void CallGraphButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Sign in user using MSAL and obtain an access token for Microsoft Graph
                GraphServiceClient graphClient = await SignInAndInitializeGraphServiceClient(scopes);
    
                // Call the /me endpoint of Graph
                User graphUser = await graphClient.Me.GetAsync();
    
                // Go back to the UI thread to make changes to the UI
                await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    ResultText.Text = "Display Name: " + graphUser.DisplayName + "\nBusiness Phone: " + graphUser.BusinessPhones.FirstOrDefault()
                                      + "\nGiven Name: " + graphUser.GivenName + "\nid: " + graphUser.Id
                                      + "\nUser Principal Name: " + graphUser.UserPrincipalName;
                    DisplayBasicTokenInfo(authResult);
                    this.SignOutButton.Visibility = Visibility.Visible;
                });
            }
            catch (MsalException msalEx)
            {
                await DisplayMessageAsync($"Error Acquiring Token:{System.Environment.NewLine}{msalEx}");
            }
            catch (Exception ex)
            {
                await DisplayMessageAsync($"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}");
                return;
            }
        }
                /// <summary>
        /// Signs in the user and obtains an access token for Microsoft Graph
        /// </summary>
        /// <param name="scopes"></param>
        /// <returns> Access Token</returns>
        private static async Task<string> SignInUserAndGetTokenUsingMSAL(string[] scopes)
        {
            // Initialize the MSAL library by building a public client application
            PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
                .WithAuthority(Authority)
                .WithUseCorporateNetwork(false)
                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                 .WithLogging((level, message, containsPii) =>
                 {
                     Debug.WriteLine($"MSAL: {level} {message} ");
                 }, LogLevel.Warning, enablePiiLogging: false, enableDefaultPlatformLogging: true)
                .Build();
    
            // It's good practice to not do work on the UI thread, so use ConfigureAwait(false) whenever possible.
            IEnumerable<IAccount> accounts = await PublicClientApp.GetAccountsAsync().ConfigureAwait(false);
            IAccount firstAccount = accounts.FirstOrDefault();
    
            try
            {
                authResult = await PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
                                                  .ExecuteAsync();
            }
            catch (MsalUiRequiredException ex)
            {
                // A MsalUiRequiredException happened on AcquireTokenSilentAsync. This indicates you need to call AcquireTokenAsync to acquire a token
                Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
    
                authResult = await PublicClientApp.AcquireTokenInteractive(scopes)
                                                  .ExecuteAsync()
                                                  .ConfigureAwait(false);
    
            }
            return authResult.AccessToken;
        }
    }
    

Etkileşimli olarak kullanıcı belirteci alma

yöntemi AcquireTokenInteractive , kullanıcıların oturum açmasını isteyen bir pencereyle sonuç alır. Uygulamalar genellikle korumalı bir kaynağa erişmek için kullanıcıların etkileşimli olarak ilk kez oturum açmasını gerektirir. Ayrıca, belirteç almak için sessiz bir işlem başarısız olduğunda da oturum açmaları gerekebilir. Bir kullanıcı parolasının süresinin dolması buna örnek olarak verilmiştir.

Kullanıcı belirtecini sessizce alma

yöntemi, AcquireTokenSilent herhangi bir kullanıcı etkileşimi olmadan belirteç alımlarını ve yenilemelerini işler. İlk kez çalıştırıldıktan ve kullanıcıdan kimlik bilgileri istendikten sonra AcquireTokenInteractive yöntemini kullanarak AcquireTokenSilent sonraki çağrılar için belirteç isteyin. Bu yöntem belirteçleri sessizce alır. Microsoft Kimlik Doğrulama Kitaplığı belirteç önbelleğini ve yenilemeyi işler.

Sonunda AcquireTokenSilent yöntemi başarısız olur. Başarısızlığın nedenleri arasında oturumu kapatan veya parolasını başka bir cihazda değiştiren bir kullanıcı yer alır. Microsoft Kimlik Doğrulama Kitaplığı sorunun etkileşimli bir eylem gerektirdiğini algıladığında bir MsalUiRequiredException özel durum oluşturur. Uygulamanız bu özel durumu iki şekilde işleyebilir:

  • Uygulamanız hemen çağırır AcquireTokenInteractive . Bu çağrı, kullanıcıdan oturum açmasını istemeye neden olur. Normalde, kullanıcı için çevrimdışı içerik bulunmayan çevrimiçi uygulamalar için bu yaklaşımı kullanın. Bu destekli kurulum tarafından oluşturulan örnek, deseni izler. Örneği ilk kez çalıştırdığınızda bunu çalışır durumda görürsünüz.

    Hiçbir kullanıcı uygulamayı kullanmadığından, accounts.FirstOrDefault() null bir değer içerir ve bir MsalUiRequiredException özel durum oluşturur.

    Örnekteki kod çağrısı yaparak AcquireTokenInteractiveözel durumu işler. Bu çağrı, kullanıcıdan oturum açmasını istemeye neden olur.

  • Uygulamanız, kullanıcılara oturum açmaları gerektiğini gösteren görsel bir gösterge sunar. Daha sonra oturum açmak için doğru zamanı seçebilirler. Uygulama daha sonra yeniden deneyebilir AcquireTokenSilent . Kullanıcılar kesinti olmadan diğer uygulama işlevlerini kullanabildiğinde bu yaklaşımı kullanın. Uygulamada çevrimdışı içeriğin kullanılabilir olması buna örnek olarak verilmiştir. Bu durumda, kullanıcılar ne zaman oturum açmak istediklerine karar verebilir. Ağ geçici olarak kullanılamadıktan sonra uygulama yeniden deneyebilir AcquireTokenSilent .

SignInUserAndGetTokenUsingMSAL yönteminden belirteci alarak Microsoft Graph Hizmet İstemcisi örneği oluşturun

Projede TokenProvider.cs adlı yeni bir dosya oluşturun: projeye sağ tıklayın, Yeni Öğe>Ekle Boş Sayfa'yı> seçin.

Yeni oluşturulan dosyaya aşağıdaki kodu ekleyin:

using Microsoft.Kiota.Abstractions.Authentication;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace UWP_app_MSGraph {
    public class TokenProvider : IAccessTokenProvider {
        private Func<string[], Task<string>> getTokenDelegate;
        private string[] scopes;

        public TokenProvider(Func<string[], Task<string>> getTokenDelegate, string[] scopes) {
            this.getTokenDelegate = getTokenDelegate;
            this.scopes = scopes;
        }

        public Task<string> GetAuthorizationTokenAsync(Uri uri, Dictionary<string, object> additionalAuthenticationContext = default,
            CancellationToken cancellationToken = default) {
            return getTokenDelegate(scopes);
        }

        public AllowedHostsValidator AllowedHostsValidator { get; }
    }
}

Bahşiş

Kodu yapıştırdıktan sonra TokenProvider.cs dosyasındaki ad alanının projenizin ad alanıyla eşleştiğinden emin olun. Bu sayede projenizdeki sınıfa daha kolay başvurabilirsiniz TokenProvider .

sınıfı, TokenProvider erişim belirtecini almak ve döndürmek için belirtilen temsilci yöntemini yürüten bir özel erişim belirteci sağlayıcısı tanımlar.

MainPage.xaml.cs dosyasına aşağıdaki yeni yöntemi ekleyin:

      /// <summary>
     /// Sign in user using MSAL and obtain a token for Microsoft Graph
     /// </summary>
     /// <returns>GraphServiceClient</returns>
     private async static Task<GraphServiceClient> SignInAndInitializeGraphServiceClient(string[] scopes)
     {
         var tokenProvider = new TokenProvider(SignInUserAndGetTokenUsingMSAL, scopes);
         var authProvider = new BaseBearerTokenAuthenticationProvider(tokenProvider);
         var graphClient = new GraphServiceClient(authProvider, MSGraphURL);

         return await Task.FromResult(graphClient);
     }

Bu yöntemde, yöntemini Microsoft Graph .NET SDK'sına bağlamak SignInUserAndGetTokenUsingMSAL ve kimliği doğrulanmış bir istemci oluşturmak için özel erişim belirteci sağlayıcısını TokenProvider kullanıyorsunuz.

BaseBearerTokenAuthenticationProviderMainPage.xaml.cs dosyasında kullanmak için aşağıdaki başvuruyu ekleyin:

using Microsoft.Kiota.Abstractions.Authentication;

Korumalı API'ye karşı REST çağrısı yapma hakkında daha fazla bilgi

Bu örnek uygulamada, GetGraphServiceClient yöntem bir erişim belirteci kullanarak örneği GraphServiceClient oluşturur. Ardından kullanıcının GraphServiceClient profil bilgilerini ben uç noktasından almak için kullanılır.

Kullanıcının oturumunu kapatmak için bir yöntem ekleme

Kullanıcının oturumunu kapatmak için MainPage.xaml.cs dosyasına aşağıdaki yöntemi ekleyin:

/// <summary>
/// Sign out the current user
/// </summary>
private async void SignOutButton_Click(object sender, RoutedEventArgs e)
{
    IEnumerable<IAccount> accounts = await PublicClientApp.GetAccountsAsync().ConfigureAwait(false);
    IAccount firstAccount = accounts.FirstOrDefault();

    try
    {
        await PublicClientApp.RemoveAsync(firstAccount).ConfigureAwait(false);
        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
        {
            ResultText.Text = "User has signed out";
            this.CallGraphButton.Visibility = Visibility.Visible;
                this.SignOutButton.Visibility = Visibility.Collapsed;
            });
        }
        catch (MsalException ex)
        {
            ResultText.Text = $"Error signing out user: {ex.Message}";
        }
    }

MSAL.NET belirteçleri almak veya hesapları işlemek için zaman uyumsuz yöntemler kullanır. Bu nedenle, kullanıcı arabirimi iş parçacığında kullanıcı arabirimi eylemlerini destekleyin. Çağrının Dispatcher.RunAsync ve çağrılacak ConfigureAwait(false)önlemlerin nedeni budur.

Oturumu kapatma hakkında daha fazla bilgi

yöntemi, SignOutButton_Click kullanıcıyı Microsoft Kimlik Doğrulama Kitaplığı kullanıcı önbelleğinden kaldırır. Bu yöntem, Microsoft Kimlik Doğrulama Kitaplığı'na geçerli kullanıcıyı unutmasını etkili bir şekilde bildirir. Gelecekte belirteç alma isteği ancak etkileşimliyse başarılı olur.

Bu örnekteki uygulama tek bir kullanıcıyı destekler. Microsoft Kimlik Doğrulama Kitaplığı, kullanıcının birden fazla hesapta oturum açabildiği senaryoları destekler. Örneğin, kullanıcının çeşitli hesapları olan bir e-posta uygulamasıdır.

Temel belirteç bilgilerini görüntüleme

Belirteçle ilgili temel bilgileri görüntülemek için MainPage.xaml.cs dosyasına aşağıdaki yöntemi ekleyin:

/// <summary>
/// Display basic information contained in the token. Needs to be called from the UI thread.
/// </summary>
private void DisplayBasicTokenInfo(AuthenticationResult authResult)
{
    TokenInfoText.Text = "";
    if (authResult != null)
    {
        TokenInfoText.Text += $"User Name: {authResult.Account.Username}" + Environment.NewLine;
        TokenInfoText.Text += $"Token Expires: {authResult.ExpiresOn.ToLocalTime()}" + Environment.NewLine;
    }
}

Daha fazla bilgi

OpenID Bağlan kullanılarak alınan kimlik belirteçleri, kullanıcıya ilişkin bilgilerin küçük bir alt kümesini de içerir. DisplayBasicTokenInfo belirtecin içerdiği temel bilgileri görüntüler. Bu bilgiler kullanıcının görünen adını ve kimliğini içerir. Ayrıca belirtecin son kullanma tarihini ve erişim belirtecinin kendisini temsil eden dizeyi içerir. Microsoft Graph API'sini Ara düğmesini birkaç kez seçerseniz, aynı belirtecin daha sonraki istekler için yeniden kullanıldığını görürsünüz. Ayrıca, Microsoft Kimlik Doğrulama Kitaplığı belirteci yenileme zamanına karar verince sona erme tarihinin uzatılmış olduğunu da görebilirsiniz.

İletiyi görüntüle

MainPage.xaml.cs dosyasına aşağıdaki yeni yöntemi ekleyin:

/// <summary>
/// Displays a message in the ResultText. Can be called from any thread.
/// </summary>
private async Task DisplayMessageAsync(string message)
{
     await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
         () =>
         {
             ResultText.Text = message;
         });
     }

Uygulamanızı kaydetme

Bahşiş

Bu makaledeki adımlar, başladığınız portala göre biraz değişiklik gösterebilir.

Şimdi uygulamanızı kaydedin:

  1. Microsoft Entra yönetim merkezinde en azından Uygulama Geliştiricisi olarak oturum açın.
  2. Birden çok kiracıya erişiminiz varsa, dizinler + abonelikler menüsünden uygulamayı kaydetmek istediğiniz kiracıya geçmek için üst menüdeki Ayarlar simgesini kullanın.
  3. Kimlik>Uygulamaları'na> göz atın Uygulama kayıtları.
  4. Yeni kayıt öğesini seçin.
  5. Uygulamanız için bir Ad girin, örneğin UWP-App-calling-MSGraph. Uygulamanızın kullanıcıları bu adı görebilir ve daha sonra değiştirebilirsiniz.
  6. Desteklenen hesap türleri'nin altında Herhangi bir kuruluş dizinindeki hesaplar (Herhangi bir Microsoft Entra dizini - Çok Kiracılı) ve kişisel Microsoft hesapları (örneğin Skype, Xbox) seçeneğini belirleyin.
  7. Kaydet'i seçin.
  8. Genel bakış sayfasında Uygulama (istemci) kimliği değerini bulun ve kopyalayın. Visual Studio'ya dönün, MainPage.xaml.cs dosyasını açın ve değerini ClientId bu değerle değiştirin.

Uygulamanız için kimlik doğrulamasını yapılandırın:

  1. Microsoft Entra yönetim merkezinde Kimlik Doğrulaması>Platform ekle'yi ve ardından Mobil ve masaüstü uygulamaları'nı seçin.
  2. Yeniden Yönlendirme URI'leri bölümüne girinhttps://login.microsoftonline.com/common/oauth2/nativeclient.
  3. Yapılandır'yı seçin.

Uygulamanız için API izinlerini yapılandırın:

  1. API izinleri>İzin ekle'yi seçin.
  2. Microsoft Graph'ı seçin.
  3. Temsilci izinleri'ne tıklayın, User.Read araması yapın ve User.Read öğesinin seçili olduğunu doğrulayın.
  4. Herhangi bir değişiklik yaptıysanız, bunları kaydetmek için İzin ekle'yi seçin.

Federasyon etki alanlarında tümleşik kimlik doğrulamasını etkinleştirme (isteğe bağlı)

Federasyon Microsoft Entra etki alanıyla kullanıldığında tümleşik Windows kimlik doğrulamasını etkinleştirmek için uygulama bildiriminin ek özellikleri etkinleştirmesi gerekir. Visual Studio'da uygulamanıza geri dönün.

  1. Package.appxmanifest dosyasını açın.

  2. Özellikler'i seçin ve aşağıdaki ayarları etkinleştirin:

    • Kurumsal Kimlik Doğrulaması
    • Özel Ağlar (İstemci ve Sunucu)
    • Paylaşılan Kullanıcı Sertifikaları

Önemli

Tümleşik Windows kimlik doğrulaması bu örnek için varsayılan olarak yapılandırılmamış. İstek veya Shared User Certificates yetenekler isteyen Enterprise Authentication uygulamalar, Windows Mağazası tarafından daha yüksek düzeyde doğrulama gerektirir. Ayrıca, tüm geliştiriciler daha yüksek doğrulama düzeyini gerçekleştirmek istemez. Bu ayarı yalnızca federasyon Microsoft Entra etki alanıyla tümleşik Windows kimlik doğrulamasına ihtiyacınız varsa etkinleştirin.

WithDefaultRedirectURI() kullanmaya alternatif yaklaşım

Geçerli örnekte WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient") yöntemi kullanılır. kullanmak WithDefaultRedirectURI()için şu adımları tamamlayın:

  1. MainPage.XAML.cs dosyasında şununla değiştirin:WithDefaultRedirectUriWithRedirectUri

    Geçerli kod

    
    PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
        .WithAuthority(Authority)
        .WithUseCorporateNetwork(false)
        .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
        .WithLogging((level, message, containsPii) =>
         {
             Debug.WriteLine($"MSAL: {level} {message} ");
         }, LogLevel.Warning, enablePiiLogging: false, enableDefaultPlatformLogging: true)
        .Build();
    
    

    Güncelleştirilmiş kod

    
    PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
        .WithAuthority("https://login.microsoftonline.com/common")
        .WithUseCorporateNetwork(false)
        .WithDefaultRedirectUri()
        .WithLogging((level, message, containsPii) =>
         {
             Debug.WriteLine($"MSAL: {level} {message} ");
         }, LogLevel.Warning, enablePiiLogging: false, enableDefaultPlatformLogging: true)
        .Build();
    
  2. MainPage.xaml.cs dosyasına alanını ekleyerek redirectURI ve üzerinde bir kesme noktası ayarlayarak uygulamanızın geri çağırma URI'sini bulun:

    
    public sealed partial class MainPage : Page
    {
            ...
    
            string redirectURI = Windows.Security.Authentication.Web.WebAuthenticationBroker
                                .GetCurrentApplicationCallbackUri().ToString();
            public MainPage()
            {
                ...
            }
           ...
    }
    
    

    Uygulamayı çalıştırın ve kesme noktasına isabet edildiğinde değerini redirectUri kopyalayın. Değerin aşağıdaki değere benzer olması gerekir: ms-app://s-1-15-2-1352796503-54529114-405753024-3540103335-3203256200-511895534-1429095407/

    Daha sonra değeri getirmek için yalnızca bir kez gerekli olduğundan kod satırını kaldırabilirsiniz.

  3. Microsoft Entra yönetim merkezinde, Kimlik Doğrulaması bölmesindeki RedirectUri'ye döndürülen değeri ekleyin.

Kodunuza test etme

Uygulamanızı test etmek için F5 tuşunu seçerek projenizi Visual Studio'da çalıştırın. Ana pencereniz görüntülenir:

Application's user interface

Test etmeye hazır olduğunuzda Microsoft Graph API'sini çağır'ı seçin. Ardından oturum açmak için bir Microsoft Entra kuruluş hesabı veya live.com veya outlook.com gibi bir Microsoft hesabı kullanın. Bir kullanıcı bu testi ilk kez çalıştırdığında, uygulama kullanıcının oturum açmasını isteyen bir pencere görüntüler.

Uygulamanızda ilk kez oturum açtığınızda, aşağıdaki görüntüye benzer bir onay ekranı görüntülenir. Erişime açıkça izin vermek için Evet'i seçin:

Access consent screen

Beklenen sonuçlar

Microsoft Graph API çağrısı tarafından döndürülen kullanıcı profili bilgilerini API Çağrısı Sonuçları ekranında görürsünüz:

API Call Results screen

Belirteç Bilgileri kutusunda veya AcquireTokenSilent aracılığıyla AcquireTokenInteractive alınan belirteçle ilgili temel bilgileri de görürsünüz:

Özellik Biçimlendir Açıklama
Username user@domain.com Kullanıcıyı tanımlayan kullanıcı adı.
Token Expires DateTime Belirtecin süresinin dolma zamanı. Microsoft Kimlik Doğrulama Kitaplığı, belirteci gerektiği gibi yenileyerek son kullanma tarihini uzatır.

Kapsamlar ve temsilci izinleri hakkında daha fazla bilgi

Microsoft Graph API'sinde kapsamın user.read bir kullanıcının profilini okuması gerekir. Bu kapsam, Uygulama Kayıt Portalı'nda kayıtlı olan her uygulamaya varsayılan olarak eklenir. Microsoft Graph için diğer API'ler ve arka uç sunucunuz için özel API'ler ek kapsamlar gerektirebilir. Örneğin, Microsoft Graph API'sinde Calendars.Read kullanıcının takvimlerini listelemek için kapsam gerekir.

Kullanıcının takvimlerine bir uygulama bağlamında erişmek için, uygulama kayıt bilgilerine temsilci iznini ekleyin Calendars.Read . Ardından kapsamı çağrısına acquireTokenSilent ekleyinCalendars.Read.

Kapsam sayısını artırdığınızda kullanıcılardan ek onaylar istenebilir.

Bilinen sorunlar

Sorun 1

Federasyon Microsoft Entra etki alanında uygulamanızda oturum açtığınızda aşağıdaki hata iletilerinden birini alırsınız:

  • "İstekte geçerli bir istemci sertifikası bulunamadı."
  • "Kullanıcının sertifika deposunda geçerli sertifika bulunamadı."
  • "Farklı bir kimlik doğrulama yöntemi seçmeyi yeniden deneyin."

Neden: Kurumsal ve sertifika özellikleri etkinleştirilmemiş.

Çözüm: Federasyon etki alanlarında tümleşik kimlik doğrulamasını etkinleştirme (isteğe bağlı) başlığı altındaki adımları izleyin.

Sorun 2

Federasyon etki alanlarında tümleşik kimlik doğrulamasını etkinleştirir ve çok faktörlü kimlik doğrulaması yapılandırılmış bir ortamda oturum açmak için Windows 10 bilgisayarında Windows Hello'yu kullanmayı denersiniz. Sertifika listesi görüntülenir. PIN'inizi kullanmayı seçerseniz PIN penceresi hiçbir zaman görünmez.

Neden: Bu sorun, Windows 10 masaüstlerinde çalışan UWP uygulamalarında web kimlik doğrulama aracısının bilinen bir sınırlamasıdır. Windows 10 Mobile'da düzgün çalışır.

Geçici çözüm: Diğer seçeneklerle oturum aç'ı seçin. Ardından Kullanıcı adı ve parolayla oturum açın'ı seçin. Parolanızı belirtin'i seçin. Ardından telefon kimlik doğrulama işlemine geçin.

Yardım ve destek 

Yardıma ihtiyacınız varsa, bir sorunu bildirmek veya destek seçenekleriniz hakkında bilgi edinmek istiyorsanız bkz . Geliştiriciler için yardım ve destek.

Sonraki adımlar

.NET uygulamalarında yetkilendirme ve kimlik doğrulaması için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) kullanma hakkında daha fazla bilgi edinin: