Bagikan melalui


Tutorial: Memanggil Microsoft Graph API dari aplikasi Universal Windows Platform (UWP)

Dalam tutorial ini, Anda membangun aplikasi Universal Windows Platform (UWP) asli yang memasukkan pengguna dan mendapatkan token akses untuk memanggil Microsoft Graph API.

Di akhir panduan ini, aplikasi Anda akan memanggil API yang dilindungi dengan menggunakan akun pribadi. Contohnya adalah outlook.com, live.com, dan lain-lain. Aplikasi Anda juga memanggil akun kerja dan sekolah dari perusahaan atau organisasi mana pun yang memiliki ID Microsoft Entra.

Dalam tutorial ini:

  • Membuat proyek Universal Windows Platform (UWP) di Visual Studio
  • Mendaftarkan aplikasi di portal Microsoft Azure
  • Menambahkan kode untuk mendukung upaya masuk dan keluar pengguna
  • Menambahkan kode untuk memanggil Microsoft Graph API
  • Menguji aplikasi

Prasyarat

Cara kerja panduan ini

Menampilkan cara kerja aplikasi contoh yang dihasilkan oleh tutorial ini

Panduan ini membuat contoh aplikasi UWP yang mengkueri Microsoft Graph API. Untuk skenario ini, token ditambahkan ke permintaan HTTP dengan menggunakan header Otorisasi. Pustaka Autentikasi Microsoft menangani akuisisi dan perpanjangan token.

MSAL.NET versi 4.61.0 ke atas tidak memberikan dukungan untuk Platform Windows Universal (UWP), Xamarin Android, dan Xamarin iOS. Sebaiknya migrasikan aplikasi UWP Anda ke kerangka kerja modern seperti WINUI. Baca selengkapnya tentang penghentian dalam Mengumumkan Penghentian MSAL.NET mendatang untuk Xamarin dan UWP.

Paket NuGet

Panduan ini menggunakan paket NuGet berikut:

Pustaka Deskripsi
Microsoft.Identity.Client Pustaka Autentikasi Microsoft
Microsoft.Graph Pustaka Klien Microsoft Graph

Menyiapkan proyek Anda

Bagian ini menyediakan petunjuk langkah demi langkah untuk mengintegrasikan aplikasi Windows Desktop .NET (XAML) beserta rincian masuk dengan Microsoft. Kemudian, aplikasi dapat meminta API web yang memerlukan token, seperti Microsoft Graph API.

Panduan ini membuat aplikasi yang menampilkan tombol yang meminta Microsoft Graph API dan tombol untuk keluar. Panduan ini juga menampilkan kotak teks yang berisi hasil panggilan.

Tip

Untuk melihat versi lengkap proyek yang dibuat dalam tutorial ini, Anda dapat mengunduhnya dari GitHub.

Membuat aplikasi

  1. Buka Visual Studio, lalu pilih Buat proyek baru.

  2. Di Buat proyek baru, pilih Aplikasi Kosong (Windows Universal) untuk C# dan pilih Berikutnya.

  3. Di Konfigurasikan proyek baru Anda, beri nama aplikasi, lalu pilih Buat.

  4. Jika diminta, di New Universal Windows Platform Project, pilih versi apa pun untuk versi Target dan Minimum, lalu pilih OK.

    Versi Minimum dan Target

Menambahkan Pustaka Autentikasi Microsoft ke proyek Anda

  1. Dalam Visual Studio, pilih Alat>NuGet Package Manager>Package Manager Console.

  2. Salin dan tempel perintah berikut di jendela Konsol Manajer Paket:

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

    Catatan

    Perintah pertama menginstal Pustaka Autentikasi Microsoft (MSAL.NET). MSAL.NET memperoleh, menyimpan dalam cache, dan me-refresh token pengguna yang mengakses API yang dilindungi oleh platform identitas Microsoft. Perintah kedua menginstal Pustaka Klien Microsoft Graph .NET untuk mengautentikasi permintaan ke Microsoft Graph dan melakukan panggilan ke layanan.

Membuat antarmuka pengguna aplikasi Anda

Visual Studio membuat MainPage.xaml sebagai bagian dari templat proyek Anda. Buka file ini, lalu ganti simpul Kisi aplikasi Anda dengan kode berikut:

<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>

Menggunakan Pustaka Autentikasi Microsoft untuk mendapatkan token untuk Microsoft Graph API

Bagian ini menampilkan cara menggunakan Pustaka Autentikasi Microsoft untuk mendapatkan token Microsoft Graph API. Lakukan perubahan pada file MainPage.xaml.cs.

  1. Di MainPage.xaml.cs, tambahkan referensi berikut:

    using Microsoft.Identity.Client;
    using Microsoft.Graph;
    using Microsoft.Graph.Models;
    using System.Diagnostics;
    using System.Threading.Tasks;
    using System.Net.Http.Headers;
    
  2. Ganti kelas MainPage Anda dengan kode berikut:

    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;
        }
    }
    

Mendapatkan token pengguna secara interaktif

Metode AcquireTokenInteractive ini menghasilkan jendela yang meminta pengguna untuk masuk. Aplikasi biasanya mengharuskan pengguna untuk masuk secara interaktif saat pertama kali mengakses sumber daya yang dilindungi. Pengguna mungkin juga perlu masuk ketika operasi senyap untuk mendapatkan token gagal. Contohnya adalah ketika kata sandi pengguna telah kedaluwarsa.

Mendapatkan token pengguna secara diam-diam

Metode AcquireTokenSilent ini menangani akuisisi dan perpanjangan token tanpa interaksi pengguna. Setelah AcquireTokenInteractive berjalan untuk pertama kalinya dan meminta info masuk kepada pengguna, gunakan metode AcquireTokenSilent untuk meminta token untuk panggilan nanti. Metode tersebut memperoleh token secara diam-diam. Pustaka Autentikasi Microsoft menangani cache dan perpanjangan token.

Akhirnya, metode AcquireTokenSilent gagal. Alasan kegagalan termasuk pengguna yang keluar atau mengubah kata sandi mereka di perangkat lain. Ketika mendeteksi bahwa masalah memerlukan tindakan interaktif, Pustaka Autentikasi Microsoft memerlukan pengecualian MsalUiRequiredException. Aplikasi Anda dapat menangani pengecualian ini dengan dua cara:

  • Aplikasi Anda akan segera memanggil AcquireTokenInteractive. Panggilan ini mengakibatkan permintaan kepada pengguna untuk masuk. Biasanya, gunakan pendekatan ini untuk aplikasi online tempat tidak ada konten offline yang tersedia untuk pengguna. Sampel yang dihasilkan oleh penyiapan terpandu ini akan mengikuti pola. Anda melihatnya berfungsi saat pertama kali Anda menjalankan sampel.

    Karena tidak ada pengguna yang menggunakan aplikasi, accounts.FirstOrDefault() berisi nilai null, dan menampilkan pengecualian MsalUiRequiredException.

    Kode dalam sampel kemudian menangani pengecualian dengan memanggil AcquireTokenInteractive. Panggilan ini mengakibatkan permintaan kepada pengguna untuk masuk.

  • Aplikasi Anda menyajikan indikasi visual kepada pengguna bahwa mereka perlu masuk. Kemudian, pengguna dapat memilih waktu yang tepat untuk masuk. Aplikasi dapat mencoba lagi AcquireTokenSilent nanti. Gunakan pendekatan ini ketika pengguna dapat menggunakan fungsionalitas aplikasi lain tanpa gangguan. Contohnya adalah ketika konten offline tersedia dalam aplikasi. Dalam hal ini, pengguna dapat memutuskan kapan mereka ingin masuk. Aplikasi dapat mencoba kembali AcquireTokenSilent setelah jaringan untuk sementara waktu tidak tersedia.

Buat Microsoft Graph Service Client dengan mendapatkan token dari metode SignInUserAndGetTokenUsingMSAL

Dalam proyek, buat file baru bernama TokenProvider.cs: klik kanan pada proyek, pilih Tambahkan>Halaman Kosong Item>Baru.

Tambahkan ke file yang baru dibuat dengan kode berikut:

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; }
    }
}

Tip

Setelah menempelkan kode, pastikan bahwa namespace dalam file TokenProvider.cs cocok dengan namespace proyek Anda. Ini akan memungkinkan Anda untuk lebih mudah mereferensikan TokenProvider kelas dalam proyek Anda.

Kelas TokenProvider menentukan penyedia token akses kustom yang menjalankan metode delegasi yang ditentukan untuk mendapatkan dan mengembalikan token akses.

Tambahkan metode baru berikut ke MainPage.xaml.cs:

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

Dalam metode ini, Anda menggunakan penyedia TokenProvider token akses kustom untuk menyambungkan SignInUserAndGetTokenUsingMSAL metode ke Microsoft Graph .NET SDK dan membuat klien terautentikasi.

Untuk menggunakan BaseBearerTokenAuthenticationProvider, dalam file MainPage.xaml.cs , tambahkan referensi berikut:

using Microsoft.Kiota.Abstractions.Authentication;

Informasi selengkapnya tentang melakukan panggilan REST terhadap API yang dilindungi

Dalam aplikasi contoh ini, metode GetGraphServiceClient akan membuat GraphServiceClient dengan menggunakan token akses. Kemudian, GraphServiceClient digunakan untuk mendapatkan informasi profil pengguna dari titik akhir saya.

Menambahkan metode mengeluarkan pengguna

Untuk mengeluarkan pengguna, tambahkan metode berikut ke MainPage.xaml.cs:

/// <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 menggunakan metode asinkron untuk memperoleh token atau memanipulasi akun. Dengan demikian, mendukung tindakan antarmuka pengguna di utas antarmuka pengguna. Ini adalah alasan untuk panggilan Dispatcher.RunAsync dan tindakan pencegahan untuk memanggil ConfigureAwait(false).

Informasi selengkapnya tentang cara keluar

Metode SignOutButton_Click ini akan menghapus pengguna dari cache pengguna Pustaka Autentikasi Microsoft. Metode ini secara efektif memberi tahu Pustaka Autentikasi Microsoft untuk melupakan pengguna saat ini. Permintaan selanjutnya untuk memperoleh token hanya berhasil jika bersifat interaktif.

Aplikasi dalam sampel ini mendukung satu pengguna. Pustaka Autentikasi Microsoft mendukung skenario di mana pengguna dapat masuk di lebih dari satu akun. Contohnya adalah aplikasi email di mana pengguna memiliki beberapa akun.

Menampilkan informasi token dasar

Tambahkan metode berikut ke MainPage.xaml.cs untuk menampilkan informasi dasar tentang token:

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

Informasi selengkapnya

Token ID yang diperoleh dengan menggunakan OpenID Connect juga berisi sebagian kecil informasi yang berkaitan dengan pengguna. DisplayBasicTokenInfo menampilkan informasi dasar yang terkandung dalam token. Informasi ini mencakup nama tampilan dan ID pengguna. Ini juga mencakup kedaluwarsa token dan string yang mewakili token akses itu sendiri. Jika memilih tombol Panggil Microsoft Graph API beberapa kali, Anda akan melihat bahwa token yang sama digunakan kembali untuk permintaan nanti. Anda juga dapat melihat kedaluwarsa diperpanjang saat Pustaka Autentikasi Microsoft memutuskan waktunya untuk memperpanjang token.

Menampilkan pesan

Tambahkan metode baru berikut ke MainPage.xaml.cs:

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

Mendaftarkan aplikasi Anda

Tip

Langkah-langkah dalam artikel ini mungkin sedikit berbeda berdasarkan portal tempat Anda memulai.

Sekarang, daftarkan aplikasi Anda:

  1. Masuk ke pusat admin Microsoft Entra setidaknya sebagai Pengembang Aplikasi.
  2. Jika Anda memiliki akses ke beberapa penyewa, gunakan ikon Pengaturan di menu atas untuk beralih ke penyewa tempat Anda ingin mendaftarkan aplikasi dari menu Direktori + langganan.
  3. Telusuri Aplikasi >Identitas>Pendaftaran aplikasi.
  4. Pilih Pendaftaran baru.
  5. Masukkan Nama untuk aplikasi Anda, contohnya UWP-App-calling-MSGraph. Pengguna aplikasi mungkin melihat nama ini, dan Anda dapat mengubahnya nanti.
  6. Di bawah Jenis akun yang didukung, pilih Akun di direktori organisasi apa pun (Direktori Microsoft Entra apa pun - Multipenyewa) dan akun Microsoft pribadi (misalnya Skype, Xbox).
  7. Pilih Daftarkan.
  8. Pada halaman ringkasan, temukan dan salin nilai ID Aplikasi (klien). Kembali ke Visual Studio, buka MainPage.xaml.cs, dan ganti nilai ClientId dengan nilai ini.

Mengonfigurasi autentikasi untuk aplikasi Anda:

  1. Di pusat admin Microsoft Entra, pilih Autentikasi>Tambahkan platform, lalu pilih Aplikasi seluler dan desktop.
  2. Di bagian URI Pengalihan, masukkan https://login.microsoftonline.com/common/oauth2/nativeclient.
  3. Pilih Konfigurasikan.

Mengonfigurasi izin API untuk aplikasi Anda:

  1. Pilih Izin API>Tambahkan izin.
  2. Pilih Microsoft Graph.
  3. Pilih Izin yang didelegasikan, cari User.Read, dan verifikasi bahwa User.Read dipilih.
  4. Jika Anda melakukan perubahan, pilih Tambahkan izin untuk menyimpannya.

Aktifkan autentikasi terintegrasi pada domain federasi (opsional)

Untuk mengaktifkan autentikasi Windows terintegrasi saat digunakan dengan domain Microsoft Entra federasi, manifes aplikasi harus mengaktifkan kemampuan tambahan. Kembali ke aplikasi Anda di Visual Studio.

  1. Buka Package.appxmanifest.

  2. Pilih Kemampuan, dan aktifkan pengaturan berikut:

    • Autentikasi Perusahaan
    • Jaringan Privat (Klien & Server)
    • Sertifikat Pengguna Bersama

Penting

NTLM Terintegrasi tidak dikonfigurasi secara default untuk sampel ini. Aplikasi yang meminta kemampuan Enterprise Authentication atau Shared User Certificates memerlukan tingkat verifikasi yang lebih tinggi oleh Windows Store. Selain itu, tidak semua pengembang ingin melakukan verifikasi tingkat yang lebih tinggi. Aktifkan pengaturan ini hanya jika Anda memerlukan autentikasi Windows terintegrasi dengan domain Microsoft Entra gabungan.

Pendekatan alternatif untuk menggunakan WithDefaultRedirectURI()

Dalam sampel saat ini, metode WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient") ini akan digunakan. Untuk menggunakan WithDefaultRedirectURI(), selesaikan langkah-langkah ini:

  1. Di MainPage.XAML.cs, ganti WithRedirectUri dengan WithDefaultRedirectUri:

    Kode saat ini

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

    Kode yang diperbarui

    
    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. Temukan URI panggilan balik untuk aplikasi Anda dengan menambahkan bidang redirectURI di MainPage.xaml.cs dan atur titik henti di dalamnya:

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

    Jalankan aplikasi, lalu salin nilai redirectUri saat titik henti tercapai. Nilai harus terlihat mirip dengan nilai berikut: ms-app://s-1-15-2-1352796503-54529114-405753024-3540103335-3203256200-511895534-1429095407/

    Anda kemudian dapat menghapus baris kode karena hanya diperlukan sekali, untuk mengambil nilai tersebut.

  3. Di pusat admin Microsoft Entra, tambahkan nilai yang dikembalikan di RedirectUri di panel Autentikasi .

Menguji kode

Untuk menguji aplikasi, pilih kunci F5 guna menjalankan proyek di Visual Studio. Jendela utama akan muncul:

Antarmuka pengguna aplikasi

Saat Anda siap untuk menguji, pilih Panggil Microsoft Graph API. Kemudian gunakan akun organisasi Microsoft Entra atau akun Microsoft, seperti live.com atau outlook.com, untuk masuk. Pertama kali pengguna menjalankan pengujian ini, aplikasi menampilkan jendela yang meminta pengguna untuk masuk.

Saat pertama masuk ke aplikasi Anda, layar persetujuan tampak mirip dengan gambar berikut. Pilih Ya untuk secara eksplisit memberi persetujuan untuk mengakses:

Layar persetujuan akses

Hasil yang diharapkan

Anda melihat informasi profil pengguna yang dikembalikan oleh panggilan Microsoft Graph API di layar Hasil Panggilan API:

Layar Hasil Panggilan API

Anda juga melihat informasi dasar tentang token yang diperoleh melalui AcquireTokenInteractive atau AcquireTokenSilent dalam kotak Info Token:

Properti Format Deskripsi
Username user@domain.com Nama pengguna yang mengidentifikasi pengguna.
Token Expires DateTime Waktu ketika token kedaluwarsa. Pustaka Autentikasi Microsoft memperpanjang kedaluwarsa dengan memperpanjang token jika diperlukan.

Informasi selengkapnya tentang cakupan dan izin yang didelegasikan

Microsoft Graph API memerlukan cakupan user.read untuk membaca profil pengguna. Cakupan ini ditambahkan secara default di setiap aplikasi yang terdaftar di Portal Pendaftaran Aplikasi. API lain untuk Microsoft Graph dan API kustom untuk server back-end Anda mungkin memerlukan cakupan tambahan. Misalnya, Microsoft Graph API memerlukan cakupan Calendars.Read untuk mencantumkan kalender pengguna.

Untuk mengakses kalender pengguna dalam konteks aplikasi, tambahkan izin yang didelegasikan Calendars.Read ke informasi pendaftaran aplikasi. Kemudian, tambahkan cakupan Calendars.Read ke panggilan acquireTokenSilent.

Pengguna mungkin dimintai persetujuan tambahan saat Anda meningkatkan jumlah cakupan.

Masalah umum

Masalah 1

Anda menerima salah satu pesan kesalahan berikut saat masuk ke aplikasi Anda di domain Microsoft Entra federasi:

  • "Tidak ada sertifikat klien yang valid yang ditemukan dalam permintaan".
  • "Tidak ada sertifikat yang valid yang ditemukan di penyimpanan sertifikat pengguna".
  • "Coba lagi pilih metode autentikasi yang berbeda".

Penyebab: Kemampuan perusahaan dan sertifikat tidak diaktifkan.

Solusi: Ikuti langkah-langkah dalam Mengaktifkan autentikasi terintegrasi pada domain federasi (opsional).

Masalah 2

Anda mengaktifkan autentikasi terintegrasi pada domain federasi dan mencoba menggunakan Windows Hello pada komputer Windows 10 untuk masuk ke lingkungan dengan autentikasi multifaktor dikonfigurasi. Daftar sertifikat akan muncul. Jika memilih untuk menggunakan PIN Anda, jendela PIN tidak pernah muncul.

Penyebab: Masalah ini adalah batasan yang diketahui dari broker autentikasi web dalam aplikasi UWP yang berjalan di desktop Windows 10. Ini berfungsi dengan baik di Windows 10 Mobile.

Solusi Sementara: Pilih Masuk dengan opsi lain. Kemudian, pilih Masuk dengan nama pengguna dan kata sandi. Pilih Berikan kata sandi Anda. Kemudian, lanjutkan ke proses autentikasi telepon.

Bantuan dan dukungan

Jika Anda memerlukan bantuan, ingin melaporkan masalah, atau ingin mempelajari opsi dukungan, lihat Bantuan dan dukungan bagi pengembang.

Langkah berikutnya

Pelajari selengkapnya tentang cara menggunakan Pustaka Autentikasi Microsoft (MSAL) untuk otorisasi dan autentikasi dalam aplikasi .NET: