Udostępnij za pośrednictwem


Samouczek: logowanie użytkowników w aplikacji powłoki MAUI platformy .NET przy użyciu dzierżawy zewnętrznej

Ten samouczek jest ostatnią częścią serii, która pokazuje, jak utworzyć aplikację powłoki interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) i przygotować ją do uwierzytelniania przy użyciu centrum administracyjnego firmy Microsoft Entra. W części 2 tej serii dodano niestandardowy pomocnik klienta biblioteki Microsoft Authentication Library (MSAL), aby zainicjować zestaw SDK bibliotek MSAL, zainstalować wymagane biblioteki i dołączyć zasób obrazu. W tym ostatnim kroku pokazano, jak dodać kod logowania i wylogowania w programie .NET MAUI i uruchomić aplikację powłoki na platformie Android.

W tym samouczku wykonasz następujące elementy:

  • Dodaj kod logowania i wylogowania.
  • Zmodyfikuj powłokę aplikacji.
  • Dodaj kod specyficzny dla platformy.
  • Dodaj ustawienia aplikacji.
  • Uruchom i przetestuj aplikację powłoki .NET MAUI.

Wymagania wstępne

Dodawanie kodu logowania i wylogowania

Interfejs użytkownika aplikacji .NET MAUI jest skonstruowany z obiektów mapowanych na natywne kontrolki każdej platformy docelowej. Główne grupy kontrolek używane do tworzenia interfejsu użytkownika aplikacji .NET MAUI to strony, układy i widoki.

Dodawanie strony widoku głównego

Następne kroki spowodują zorganizowanie kodu w taki sposób, aby został main view zdefiniowany.

  1. Usuń plik MainPage.xaml i MainPage.xaml.cs z projektu, ale nie są już potrzebne. W okienku Eksplorator rozwiązań znajdź wpis MainPage.xaml, kliknij go prawym przyciskiem myszy i wybierz polecenie Usuń.

  2. Kliknij prawym przyciskiem myszy projekt SignInMaui i wybierz polecenie Dodaj>nowy folder. Nadaj folderowi nazwę Widoki.

  3. Kliknij prawym przyciskiem myszy widoki.

  4. Wybierz pozycję Dodaj>nowy element....

  5. Wybierz pozycję .NET MAUI na liście szablonów.

  6. Wybierz szablon .NET MAUI ContentPage (XAML). Nadaj plikowi nazwę MainView.xaml.

  7. Wybierz Dodaj.

  8. Plik MainView.xaml zostanie otwarty na nowej karcie dokumentu, wyświetlając wszystkie znaczniki XAML reprezentujące interfejs użytkownika strony. Zastąp znacznik XAML następującym znacznikiem:

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 x:Class="SignInMaui.Views.MainView"
                 Title="Microsoft Entra External ID"
                 >
        <Shell.BackButtonBehavior>
            <BackButtonBehavior IsVisible="False" IsEnabled="False" />
        </Shell.BackButtonBehavior>
    
        <ScrollView>
            <VerticalStackLayout 
                Spacing="25" 
                Padding="30,0" 
                VerticalOptions="Center">
    
                <Image
                    Source="external_id.png"
                    SemanticProperties.Description="External ID"
                    HeightRequest="200"
                    HorizontalOptions="Center" />
    
                <Label 
                    Text="CIAM"
                    SemanticProperties.HeadingLevel="Level1"
                    FontSize="26"
                    HorizontalOptions="Center" />
    
                <Label 
                    Text="MAUI sample"
                    SemanticProperties.HeadingLevel="Level1"
                    FontSize="26"
                    HorizontalOptions="Center" />
    
                <Button 
                    x:Name="SignInButton"
                    Text="Sign In"
                    SemanticProperties.Hint="Sign In"
                    Clicked="OnSignInClicked"
                    HorizontalOptions="Center"
                    IsEnabled="False"/>
    
            </VerticalStackLayout>
        </ScrollView>
     
    </ContentPage>
    
  9. Zapisz plik.

    Podzielmy kluczowe części kontrolek XAML umieszczonych na stronie:

    • <ContentPage> jest obiektem głównym klasy MainView.
    • <VerticalStackLayout> jest obiektem podrzędnym elementu ContentPage. Ta kontrolka układu rozmieszcza elementy podrzędne w pionie, jeden po drugim.
    • <Image> wyświetla obraz, w tym przypadku używa pobranego wcześniej active_directory.png azure.
    • <Label> kontrolki wyświetlają tekst.
    • <Button> użytkownik może naciskać, co powoduje wywołanie Clicked zdarzenia. Kod można uruchomić w odpowiedzi na Clicked zdarzenie.
    • Clicked="OnSignInClicked"Clicked zdarzenie przycisku jest przypisywane do OnSignInClicked programu obsługi zdarzeń, który zostanie zdefiniowany w pliku za pomocą kodu. Ten kod zostanie utworzony w następnym kroku.

Obsługa zdarzenia OnSignInClicked

Następnym krokiem jest dodanie kodu zdarzenia przycisku Clicked .

  1. W okienku Eksplorator rozwiązań programu Visual Studio rozwiń plik MainView.xaml, aby wyświetlić MainView.xaml.cs pliku za kodem. Otwórz MainView.xaml.cs i zastąp zawartość pliku następującym kodem:

    // Copyright (c) Microsoft Corporation. All rights reserved.
    // Licensed under the MIT License.
    
    using SignInMaui.MSALClient;
    using Microsoft.Identity.Client;
    
    namespace SignInMaui.Views
    {
        public partial class MainView : ContentPage
        {
            public MainView()
            {
                InitializeComponent();
    
                IAccount cachedUserAccount = PublicClientSingleton.Instance.MSALClientHelper.FetchSignedInUserFromCache().Result;
    
                _ = Dispatcher.DispatchAsync(async () =>
                {
                    if (cachedUserAccount == null)
                    {
                        SignInButton.IsEnabled = true;
                    }
                    else
                    {
                        await Shell.Current.GoToAsync("claimsview");
                    }
                });
            }
    
            private async void OnSignInClicked(object sender, EventArgs e)
            {
                await PublicClientSingleton.Instance.AcquireTokenSilentAsync();
                await Shell.Current.GoToAsync("claimsview");
            }
            protected override bool OnBackButtonPressed() { return true; }
    
        }
    }
    

    Klasa MainView jest stroną zawartości odpowiedzialną za wyświetlanie głównego widoku aplikacji. W konstruktorze pobiera buforowane konto użytkownika przy użyciu MSALClientHelper PublicClientSingleton z wystąpienia i włącza przycisk logowania, jeśli nie znaleziono buforowanego konta użytkownika.

    Po kliknięciu przycisku logowania wywołuje AcquireTokenSilentAsync metodę w celu uzyskania tokenu w trybie dyskretnym i przechodzi do claimsview strony przy użyciu Shell.Current.GoToAsync metody . OnBackButtonPressed Ponadto metoda jest zastępowana w celu zwrócenia wartości true, co oznacza, że przycisk Wstecz jest wyłączony dla tego widoku.

Dodawanie strony widoku oświadczeń

Następne kroki spowodują zorganizowanie kodu w taki sposób, aby ClaimsView strona została zdefiniowana. Na stronie zostaną wyświetlone oświadczenia użytkownika znalezione w tokenie identyfikatora.

  1. W okienku Eksplorator rozwiązań programu Visual Studio kliknij prawym przyciskiem myszy pozycję Widoki.

  2. Wybierz pozycję Dodaj>nowy element....

  3. Wybierz pozycję .NET MAUI na liście szablonów.

  4. Wybierz szablon .NET MAUI ContentPage (XAML). Nadaj plikowi nazwę ClaimsView.xaml.

  5. Wybierz Dodaj.

  6. Plik ClaimsView.xaml zostanie otwarty na nowej karcie dokumentu, wyświetlając wszystkie znaczniki XAML reprezentujące interfejs użytkownika strony. Zastąp znacznik XAML następującym znacznikiem:

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 x:Class="SignInMaui.Views.ClaimsView"
                 Title="ID Token View">
        <Shell.BackButtonBehavior>
            <BackButtonBehavior IsVisible="False" IsEnabled="False" />
        </Shell.BackButtonBehavior>
        <VerticalStackLayout>
            <Label 
                Text="CIAM"
                FontSize="26"
                HorizontalOptions="Center" />
            <Label 
                Text="MAUI sample"
                FontSize="26"
                Padding="0,0,0,20"
                HorizontalOptions="Center" />
    
            <Label 
                Padding="0,20,0,0"
                VerticalOptions="Center" 
                HorizontalOptions="Center"
                FontSize="18"
                Text="Claims found in ID token"
                />
            <ListView ItemsSource="{Binding IdTokenClaims}"
                      x:Name="Claims">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid Padding="0, 0, 0, 0">
                                <Label Grid.Column="1" 
                                       Text="{Binding}" 
                                       HorizontalOptions="Center" />
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <Button
                x:Name="SignOutButton"
                Text="Sign Out"
                HorizontalOptions="Center"
                Clicked="SignOutButton_Clicked" />
        </VerticalStackLayout>
    </ContentPage>
    

    Ten kod znaczników XAML reprezentuje układ interfejsu użytkownika dla widoku oświadczenia w aplikacji .NET MAUI. Zaczyna się od zdefiniowania z ContentPage tytułem i wyłączenia zachowania przycisku Wstecz.

    VerticalStackLayoutWewnątrz elementu znajduje się kilka Label elementów wyświetlających tekst statyczny, a następnie ListView nazwa, która wiąże się z kolekcją o nazwie IdTokenClaims Claims w celu wyświetlenia oświadczeń znalezionych w tokenie identyfikatora. Każde oświadczenie jest renderowane w obiekcie ViewCell za pomocą DataTemplate elementu i wyświetlane jako wyśrodkowane Label w siatce.

    Na koniec znajduje się Sign Out przycisk wyśrodkowany w dolnej części układu, który wyzwala SignOutButton_Clicked procedurę obsługi zdarzeń po kliknięciu.

Obsługa danych ClaimsView

Następnym krokiem jest dodanie kodu do obsługi ClaimsView danych.

  1. W okienku Eksplorator rozwiązań programu Visual Studio rozwiń plik ClaimsView.xaml, aby wyświetlić ClaimsView.xaml.cs pliku za kodem. Otwórz ClaimsView.xaml.cs i zastąp zawartość pliku następującym kodem:

    using SignInMaui.MSALClient;
    using Microsoft.Identity.Client;
    
    namespace SignInMaui.Views;
    
    public partial class ClaimsView : ContentPage
    {
        public IEnumerable<string> IdTokenClaims { get; set; } = new string[] {"No claims found in ID token"};
        public ClaimsView()
        {
            BindingContext = this;
            InitializeComponent();
    
            _ = SetViewDataAsync();
        }
    
        private async Task SetViewDataAsync()
        {
            try
            {
                _ = await PublicClientSingleton.Instance.AcquireTokenSilentAsync();
    
                IdTokenClaims = PublicClientSingleton.Instance.MSALClientHelper.AuthResult.ClaimsPrincipal.Claims.Select(c => c.Value);
    
                Claims.ItemsSource = IdTokenClaims;
            }
    
            catch (MsalUiRequiredException)
            {
                await Shell.Current.GoToAsync("claimsview");
            }
        }
    
        protected override bool OnBackButtonPressed() { return true; }
    
        private async void SignOutButton_Clicked(object sender, EventArgs e)
        {
            await PublicClientSingleton.Instance.SignOutAsync().ContinueWith((t) =>
            {
                return Task.CompletedTask;
            });
    
            await Shell.Current.GoToAsync("mainview");
        }
    }
    

    Kod ClaimsView.xaml.cs reprezentuje kod w widoku oświadczeń w aplikacji .NET MAUI. Rozpoczyna się od zaimportowania niezbędnych przestrzeni nazw i zdefiniowania klasy, która rozszerza klasę ClaimsView ContentPage. Właściwość IdTokenClaims jest wyliczaną ciągami, początkowo ustawioną na pojedynczy ciąg wskazujący, że nie znaleziono oświadczeń.

    Konstruktor ClaimsView ustawia kontekst powiązania na bieżące wystąpienie, inicjuje składniki widoku i wywołuje metodę SetViewDataAsync asynchronicznie. Metoda SetViewDataAsync próbuje uzyskać token dyskretnie, pobiera oświadczenia z wyniku uwierzytelniania i ustawia IdTokenClaims właściwość, aby wyświetlić je w ListView nazwie Claims. Jeśli wystąpi błąd MsalUiRequiredException , wskazując, że interakcja użytkownika jest wymagana do uwierzytelniania, aplikacja przechodzi do widoku oświadczeń.

    Metoda OnBackButtonPressed zastępuje zachowanie przycisku Wstecz, aby zawsze zwracać wartość true, uniemożliwiając użytkownikowi powrót z tego widoku. Program SignOutButton_Clicked obsługi zdarzeń podpisuje użytkownika przy użyciu wystąpienia, a po zakończeniu PublicClientSingleton przechodzi do obiektu main view.

Modyfikowanie powłoki aplikacji

Klasa AppShell definiuje hierarchię wizualną aplikacji, znacznik XAML używany podczas tworzenia interfejsu użytkownika aplikacji. Zaktualizuj element , AppShell aby poinformować go o obiekcie Views.

  1. AppShell.xaml Kliknij dwukrotnie plik w okienku Eksplorator rozwiązań, aby otworzyć edytor XAML. Zastąp znacznik XAML następującym kodem:

    <?xml version="1.0" encoding="UTF-8" ?>
    <Shell
        x:Class="SignInMaui.AppShell"
        xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        xmlns:local="clr-namespace:SignInMaui.Views"
        Shell.FlyoutBehavior="Disabled">
    
        <ShellContent
            Title="Home"
            ContentTemplate="{DataTemplate local:MainView}"
            Route="MainPage" />
    </Shell>
    

    Kod XAML definiuje klasę AppShell , która wyłącza zachowanie wysuwane i ustawia główną zawartość na ShellContent element z tytułem Home i szablonem zawartości wskazującym klasę MainView .

  2. W okienku Eksplorator rozwiązań programu Visual Studio rozwiń plik AppShell.xaml, aby wyświetlić AppShell.xaml.cs pliku za kodem. Otwórz AppShell.xaml.cs i zastąp zawartość pliku następującym kodem:

    // Copyright (c) Microsoft Corporation. All rights reserved.
    // Licensed under the MIT License.
    using SignInMaui.Views;
    
    namespace SignInMaui;
    
    public partial class AppShell : Shell
    {
        public AppShell()
        {
            InitializeComponent();
            Routing.RegisterRoute("mainview", typeof(MainView));
            Routing.RegisterRoute("claimsview", typeof(ClaimsView));
        }
    }
    

    Plik zostanie zaktualizowany AppShell.xaml.cs w celu uwzględnienia niezbędnych rejestracji tras dla obiektów MainView i ClaimsView. Wywołując metodę InitializeComponent() , należy upewnić się, że inicjowanie AppShell klasy. Metoda RegisterRoute() kojarzy trasy i claimsview z odpowiednimi typami widoków MainView i ClaimsView.mainview

Dodawanie kodu specyficznego dla platformy

Projekt aplikacji .NET MAUI zawiera folder Platformy z każdym folderem podrzędnym reprezentującym platformę docelową programu .NET MAUI. Aby zapewnić zachowanie specyficzne dla aplikacji systemu Android w celu uzupełnienia domyślnej klasy aplikacji, wykonaj następujące kroki:

  1. Kliknij Platforms/Android/AndroidManifest.xml dwukrotnie plik w okienku Eksplorator rozwiązań, aby otworzyć edytor XML. Zaktualizuj następujące właściwości:

    • W polu Nazwa aplikacji ustaw wartość MAUI CIAM.
    • Ustaw wartość Nazwa pakietu na SignInMaui.Droid.
    • Ustaw minimalną wersję systemu Android na Android 5.0 (poziom interfejsu API 21).
  2. Kliknij Platforms/Android/MainActivity.cs dwukrotnie plik w okienku Eksplorator rozwiązań, aby otworzyć edytor csharp. Zastąp zawartość pliku następującym kodem:

    // Copyright (c) Microsoft Corporation. All rights reserved.
    // Licensed under the MIT License.
    using Android.App;
    using Android.Content;
    using Android.Content.PM;
    using Android.OS;
    using SignInMaui.MSALClient;
    using Microsoft.Identity.Client;
    
    namespace SignInMaui;
    
    [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
    public class MainActivity : MauiAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            // configure platform specific params
            PlatformConfig.Instance.RedirectUri = $"msal{PublicClientSingleton.Instance.MSALClientHelper.AzureAdConfig.ClientId}://auth";
            PlatformConfig.Instance.ParentWindow = this;
    
            // Initialize MSAL and platformConfig is set
            _ = Task.Run(async () => await PublicClientSingleton.Instance.MSALClientHelper.InitializePublicClientAppAsync()).Result;
        }
    
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
        }
    }
    

    Podzielmy kluczowe części dodanego kodu:

    • Niezbędne using instrukcje znajdują się u góry.
    • Klasa MainActivity jest definiowana, dziedzicząca z MauiAppCompatActivityklasy , która jest klasą bazową dla platformy Android na platformie .NET MAUI.
    • Atrybut [Activity] jest stosowany do MainActivity klasy, określając różne ustawienia działania systemu Android.
      • Theme = "@style/Maui.SplashTheme" ustawia motyw powitalny dla działania.
      • MainLauncher = true wyznacza to działanie jako główny punkt wejścia aplikacji.
      • ConfigurationChangesOkreśla zmiany konfiguracji, które może obsłużyć działanie, takie jak rozmiar ekranu, orientacja, tryb interfejsu użytkownika, układ ekranu, najmniejszy rozmiar ekranu i gęstość.
    • OnCreate Metoda jest zastępowana w celu zapewnienia logiki niestandardowej podczas tworzenia działania.
      • base.OnCreate(savedInstanceState) wywołuje podstawową implementację metody .
      • PlatformConfig.Instance.RedirectUri parametr jest ustawiany na wartość generowaną dynamicznie na PublicClientSingleton.Instance.MSALClientHelper.AzureAdConfig.ClientIdpodstawie wartości . Konfiguruje identyfikator URI przekierowania dla klienta biblioteki MSAL.
      • PlatformConfig.Instance.ParentWindow parametr jest ustawiony na bieżące wystąpienie działania, które określa okno nadrzędne dla operacji związanych z uwierzytelnianiem.
      • PublicClientSingleton.Instance.MSALClientHelper.InitializePublicClientAppAsync() Inicjuje aplikację kliencką MSAL asynchronicznie przy użyciu metody pomocniczej z pojedynczego wystąpienia o nazwie MSALClientHelper. Element Task.Run służy do wykonywania inicjowania w wątku w tle i .Result służy do synchronicznego oczekiwania na ukończenie zadania.
    • OnActivityResult Metoda jest zastępowana w celu obsługi wyniku działania uruchomionego przez bieżące działanie.
      • base.OnActivityResult(requestCode, resultCode, data) wywołuje podstawową implementację metody .
      • AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data) Ustawia argumenty zdarzeń kontynuacji uwierzytelniania na podstawie otrzymanego kodu żądania, kodu wyniku i danych intencji. Jest to używane do kontynuowania przepływu uwierzytelniania po wystąpieniu działania zewnętrznego zwraca wynik.
  3. W okienku Eksplorator rozwiązań programu Visual Studio wybierz pozycję Platformy.

  4. Kliknij prawym przyciskiem myszy folder >Android Dodaj>nowy element....

  5. Wybierz pozycję Klasa elementów>języka C#. Nazwij plik MsalActivity.cs.

  6. Zastąp zawartość MsalActivity.cs pliku następującym kodem:

    // Copyright (c) Microsoft Corporation. All rights reserved.
    // Licensed under the MIT License.
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    using Microsoft.Identity.Client;
    
    namespace MauiAppBasic.Platforms.Android.Resources
    {
        [Activity(Exported =true)]
        [IntentFilter(new[] { Intent.ActionView },
            Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
            DataHost = "auth",
            DataScheme = "msalEnter_the_Application_Id_Here")]
        public class MsalActivity : BrowserTabActivity
        {
        }
    }
    

    Podzielmy kluczowe części dodanego kodu:

    • MsalActivity klasa jest zadeklarowana w MauiAppBasic.Platforms.Android.Resources przestrzeni nazw. Klasa dziedziczy z BrowserTabActivity klasy, co oznacza, że rozszerza swoją funkcjonalność.
    • Klasa jest ozdobiona atrybutem [Activity(Exported = true)] , co oznacza, że działanie jest eksportowane i można uzyskać do nich dostęp za pomocą innych metod.
    • Filtr intencji jest określany przy użyciu atrybutu "[IntentFilter(...)]". Konfiguruje działanie w celu przechwycenia intencji ActionView .
    • Filtr intencji jest ustawiony do obsługi intencji ActionView z określonym DataScheme (msalEnter_the_Application_Id_Here) i DataHost ("auth"). Ta konfiguracja umożliwia działanie obsługi procesu uwierzytelniania przez przechwytywanie i przetwarzanie intencji ActionView . Zastąp Enter_the_Application_Id_Here ciąg identyfikatorem aplikacji (klienta) zarejestrowanej wcześniej aplikacji.

Dodawanie ustawień aplikacji

Ustawienia umożliwiają rozdzielenie danych, które konfigurują zachowanie aplikacji z kodu, co pozwala na zmianę zachowania bez ponownego kompilowania aplikacji. ConfigurationManager Zapewnia MauiAppBuilder konfigurowanie ustawień w naszej aplikacji .NET MAUI. Dodajmy appsettings.json plik jako EmbeddedResource.

Aby utworzyć program appsettings.json, wykonaj następujące kroki:

  1. W okienku Eksplorator rozwiązań programu Visual Studio kliknij prawym przyciskiem myszy projekt> SignInMaui Dodaj>nowy element....

  2. Wybierz pozycję Web JavaScript JSON Configuration File (Plik konfiguracji web>JavaScript JSON). Nazwij plik appsettings.json.

  3. Wybierz Dodaj.

  4. Wybierz appsettings.json

  5. W okienku Właściwości ustaw wartość Akcja kompilacji na Zasób osadzony.

  6. W okienku Właściwości ustaw opcję Kopiuj na Katalog wyjściowy, aby zawsze kopiować.

  7. Zastąp zawartość appsettings.json pliku następującym kodem:

    {
      "AzureAd": {
        "Authority": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/",
        "ClientId": "Enter_the_Application_Id_Here",
        "CacheFileName": "msal_cache.txt",
        "CacheDir": "C:/temp"
      },
      "DownstreamApi": {
        "Scopes": "openid offline_access"
      }
    }
    
  8. W pliku appsettings.jsonznajdź symbol zastępczy:

    1. Enter_the_Tenant_Subdomain_Here i zastąp ją poddomeną Katalog (dzierżawa). Jeśli na przykład domena podstawowa dzierżawy to contoso.onmicrosoft.com, użyj polecenia contoso. Jeśli nie masz swojej nazwy dzierżawy, dowiedz się, jak odczytywać szczegóły dzierżawy.
    2. Enter_the_Application_Id_Here zastąp ją identyfikatorem aplikacji (klienta) zarejestrowanej wcześniej aplikacji.

Użyj niestandardowej domeny adresu URL (opcjonalnie)

Użyj domeny niestandardowej, aby w pełni oznaczyć adres URL uwierzytelniania. Z perspektywy użytkownika użytkownicy pozostają w domenie podczas procesu uwierzytelniania, a nie przekierowywani do ciamlogin.com nazwy domeny.

Wykonaj następujące kroki, aby użyć domeny niestandardowej:

  1. Wykonaj kroki opisane w temacie Włączanie niestandardowych domen url dla aplikacji w dzierżawach zewnętrznych, aby włączyć niestandardową domenę adresu URL dla dzierżawy zewnętrznej.

  2. Otwórz plik appsettings.json :

    1. Zaktualizuj wartość Authority właściwości na https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Zastąp Enter_the_Custom_Domain_Here ciąg domeną niestandardowego adresu URL i Enter_the_Tenant_ID_Here identyfikatorem dzierżawy. Jeśli nie masz identyfikatora dzierżawy, dowiedz się, jak odczytywać szczegóły dzierżawy.
    2. Dodaj knownAuthorities właściwość o wartości [Enter_the_Custom_Domain_Here].

Po wprowadzeniu zmian w pliku appsettings.json , jeśli domena niestandardowego adresu URL jest login.contoso.com, a identyfikator dzierżawy to aaaabbbb-0000-cccc-1111-dddd2222eeeee, plik powinien wyglądać podobnie do następującego fragmentu kodu:

{
  "AzureAd": {
    "Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "ClientId": "Enter_the_Application_Id_Here",
    "CacheFileName": "msal_cache.txt",
    "CacheDir": "C:/temp",
    "KnownAuthorities": ["login.contoso.com"]
  },
  "DownstreamApi": {
    "Scopes": "openid offline_access"
  }
}

Uruchamianie i testowanie aplikacji mobilnej .NET MAUI

Aplikacje .NET MAUI są przeznaczone do uruchamiania na wielu systemach operacyjnych i urządzeniach. Musisz wybrać docelowy element docelowy, za pomocą którego chcesz przetestować i debugować aplikację.

Ustaw element docelowy debugowania na pasku narzędzi programu Visual Studio na urządzenie, za pomocą którego chcesz debugować i testować. W poniższych krokach pokazano, jak ustawić element docelowy debugowania na system Android:

  1. Wybierz pozycję Debuguj docelową listę rozwijaną.
  2. Wybierz pozycję Emulatory systemu Android.
  3. Wybierz pozycję Urządzenie emulatora.

Uruchom aplikację, naciskając F5 lub wybierając przycisk odtwarzania w górnej części programu Visual Studio.

  1. Teraz możesz przetestować przykładową aplikację .NET MAUI dla systemu Android. Po uruchomieniu aplikacji w emulatorze zostanie wyświetlone okno aplikacji systemu Android:

    Zrzut ekranu przedstawiający przycisk logowania w aplikacji systemu Android.

  2. W wyświetlonym oknie systemu Android wybierz przycisk Zaloguj . Zostanie otwarte okno przeglądarki z monitem o zalogowanie się.

    Zrzut ekranu przedstawiający monit użytkownika o wprowadzenie poświadczeń w aplikacji systemu Android.

    Podczas procesu logowania zostanie wyświetlony monit o przyznanie różnych uprawnień (aby zezwolić aplikacji na dostęp do danych). Po pomyślnym zalogowaniu się i wyrażeniu zgody na ekranie aplikacji zostanie wyświetlona strona główna.

    Zrzut ekranu przedstawiający stronę główną aplikacji systemu Android po zalogowaniu.

Zobacz też