Aplikacja klasyczna, która wywołuje internetowe interfejsy API: uzyskiwanie tokenu interaktywnie
W poniższym przykładzie pokazano minimalny kod, aby interaktywnie uzyskać token do odczytywania profilu użytkownika za pomocą programu Microsoft Graph.
Kod w MSAL.NET
string[] scopes = new string[] { "user.read" };
var app = PublicClientApplicationBuilder.Create("YOUR_CLIENT_ID")
.WithDefaultRedirectUri()
.Build();
var accounts = await app.GetAccountsAsync();
AuthenticationResult result;
try
{
result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.ExecuteAsync();
}
catch (MsalUiRequiredException)
{
result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
}
Parametry obowiązkowe
AcquireTokenInteractive
ma tylko jeden parametr obowiązkowy, scopes
. Zawiera on wyliczenie ciągów, które definiują zakresy, dla których jest wymagany token. Jeśli token jest przeznaczony dla programu Microsoft Graph, możesz znaleźć wymagane zakresy w dokumentacji interfejsu API każdego interfejsu API programu Microsoft Graph w sekcji "Uprawnienia". Aby na przykład wyświetlić listę kontaktów użytkownika, musisz użyć zarówno User.Read
opcji , jak i Contacts.Read
jako zakresu. Aby uzyskać więcej informacji, zobacz Informacje o uprawnieniach usługi Microsoft Graph.
W aplikacjach klasycznych i mobilnych ważne jest określenie elementu nadrzędnego przy użyciu polecenia .WithParentActivityOrWindow
. W wielu przypadkach jest to wymagane, a biblioteka MSAL zgłasza wyjątki.
W przypadku aplikacji klasycznych zobacz Obsługa okien nadrzędnych.
W przypadku aplikacji mobilnych podaj Activity
(Android) lub UIViewController
(iOS).
Parametry opcjonalne w MSAL.NET
WithParentActivityOrWindow
Interfejs użytkownika jest ważny, ponieważ jest interaktywny. AcquireTokenInteractive
Ma jeden konkretny opcjonalny parametr, który może określać (dla platform, które ją obsługują) nadrzędny interfejs użytkownika. W przypadku korzystania z .WithParentActivityOrWindow
aplikacji klasycznej ma inny typ, który zależy od platformy.
Alternatywnie możesz pominąć opcjonalny parametr okna nadrzędnego, aby utworzyć okno, jeśli nie chcesz kontrolować, gdzie na ekranie pojawi się okno dialogowe logowania. Ta opcja ma zastosowanie w przypadku aplikacji, które są oparte na wierszu polecenia, są używane do przekazywania wywołań do dowolnej innej usługi zaplecza i nie potrzebują żadnych okien do interakcji użytkownika.
// net45
WithParentActivityOrWindow(IntPtr windowPtr)
WithParentActivityOrWindow(IWin32Window window)
// Mac
WithParentActivityOrWindow(NSWindow window)
// .NET Standard (this will be on all platforms at runtime, but only on .NET Standard platforms at build time)
WithParentActivityOrWindow(object parent).
Uwagi:
W programie .NET Standard oczekiwana
object
wartość jestActivity
w systemie Android,UIViewController
w systemie iOS,NSWindow
na komputerach Mac iIWin32Window
wIntPr
systemie Windows.W systemie Windows należy wywołać
AcquireTokenInteractive
wątek interfejsu użytkownika, aby przeglądarka osadzona pobierała odpowiedni kontekst synchronizacji interfejsu użytkownika. Wywołanie z wątku interfejsu użytkownika może spowodować nieprawidłowe pompowanie komunikatów i spowodować scenariusze zakleszczenia za pomocą interfejsu użytkownika. Jednym ze sposobów wywoływania biblioteki Microsoft Authentication Library (MSAL) z wątku interfejsu użytkownika, jeśli nie jesteś już w wątku interfejsu użytkownika, jest użycieDispatcher
go w programie Windows Presentation Foundation (WPF).Jeśli używasz WPF, aby uzyskać okno z kontrolki WPF, możesz użyć
WindowInteropHelper.Handle
klasy . Następnie wywołanie pochodzi z kontrolki WPF (this
):result = await app.AcquireTokenInteractive(scopes) .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle) .ExecuteAsync();
WithPrompt
WithPrompt()
Służy do kontrolowania interakcyjności z użytkownikiem, określając monit. Dokładne zachowanie można kontrolować przy użyciu struktury Microsoft.Identity.Client.Prompt .
Struktura definiuje następujące stałe:
SelectAccount
Wymusza usługę tokenu zabezpieczającego (STS) w celu przedstawienia okna dialogowego wyboru konta zawierającego konta, dla których użytkownik ma sesję. Ta opcja jest domyślnie zaznaczona. Jest to przydatne, gdy chcesz zezwolić użytkownikom na wybór między różnymi tożsamościami.Ta opcja powoduje wysłanie biblioteki
prompt=select_account
MSAL do dostawcy tożsamości. Zapewnia najlepsze możliwe środowisko na podstawie dostępnych informacji, takich jak konto i obecność sesji dla użytkownika. Nie zmieniaj go, chyba że masz dobry powód.Consent
Umożliwia wymusinie monitowania użytkownika o zgodę, nawet jeśli aplikacja udzieliła zgody przed. W takim przypadku biblioteka MSAL wysyła do dostawcyprompt=consent
tożsamości. Tej opcji można użyć w niektórych aplikacjach skoncentrowanych na zabezpieczeniach, w których nadzór organizacji wymaga wyświetlenia okna dialogowego zgody za każdym razem, gdy użytkownik otworzy aplikację.ForceLogin
umożliwia wyświetlenie monitu o podanie poświadczeń przez użytkownika, nawet jeśli ten monit użytkownika może nie być potrzebny. Ta opcja może być przydatna, aby umożliwić użytkownikowi ponowne zalogowanie się w przypadku niepowodzenia pozyskiwania tokenu. W takim przypadku biblioteka MSAL wysyła do dostawcyprompt=login
tożsamości. Organizacje czasami używają tej opcji w aplikacjach skoncentrowanych na zabezpieczeniach, w których nadzór wymaga, aby użytkownicy logowali się za każdym razem, gdy uzyskują dostęp do określonych części aplikacji.Create
wyzwala środowisko rejestracji dla tożsamości zewnętrznych, wysyłającprompt=create
do dostawcy tożsamości. Aplikacje usługi Azure Active Directory B2C (Azure AD B2C) nie powinny wysyłać tego monitu. Aby uzyskać więcej informacji, zobacz Dodawanie przepływu użytkownika rejestracji samoobsługowej do aplikacji.Never
(tylko dla platformy .NET 4.5 i środowisko wykonawcze systemu Windows) nie wyświetla monitu użytkownika. Zamiast tego próbuje użyć pliku cookie przechowywanego w ukrytym osadzonym widoku internetowym.Użycie tej opcji może zakończyć się niepowodzeniem. W takim przypadku zgłasza wyjątek informujący o
AcquireTokenInteractive
konieczności interakcji interfejsu użytkownika. Następnie użyj innegoPrompt
parametru.NoPrompt
nie wysyła żadnych monitów do dostawcy tożsamości. Dostawca tożsamości decyduje, które środowisko logowania jest najlepsze dla użytkownika (logowanie jednokrotne lub wybierz konto).Ta opcja jest obowiązkowa w przypadku edytowania zasad profilu w usłudze Azure AD B2C. Aby uzyskać więcej informacji, zobacz Azure AD B2C specifics (Szczegóły usługi Azure AD B2C).
WithUseEmbeddedWebView
Ta metoda umożliwia określenie, czy chcesz wymusić użycie osadzonego elementu WebView lub systemowego widoku WebView (jeśli jest dostępna). Aby uzyskać więcej informacji, zobacz Użycie przeglądarek internetowych.
var result = await app.AcquireTokenInteractive(scopes)
.WithUseEmbeddedWebView(true)
.ExecuteAsync();
WithExtraScopeToConsent
Ten modyfikator jest przeznaczony dla zaawansowanych scenariuszy, w których użytkownik chce wyrazić zgodę na kilka zasobów z góry i nie chcesz używać zgody przyrostowej. Deweloperzy zwykle używają zgody przyrostowej z MSAL.NET i Platforma tożsamości Microsoft.
var result = await app.AcquireTokenInteractive(scopesForCustomerApi)
.WithExtraScopeToConsent(scopesForVendorApi)
.ExecuteAsync();
WithCustomWebUi
Internetowy interfejs użytkownika to mechanizm wywoływania przeglądarki. Ten mechanizm może być dedykowaną kontrolką WebBrowser interfejsu użytkownika lub sposobem delegowania otwierania przeglądarki. Biblioteka MSAL udostępnia implementacje internetowego interfejsu użytkownika dla większości platform, ale możesz chcieć hostować przeglądarkę samodzielnie w następujących przypadkach:
- Masz platformy, które biblioteka MSAL nie obejmuje jawnie, takich jak Blazor, Unity i Mono na komputerach stacjonarnych.
- Chcesz przetestować aplikację i użyć zautomatyzowanej przeglądarki, która może być używana z selenium.
- Przeglądarka i aplikacja z uruchomionym biblioteką MSAL znajdują się w osobnych procesach.
Aby to osiągnąć, należy nadać biblioteki MSAL start Url
, która musi być wyświetlana w przeglądarce, aby użytkownicy mogli wprowadzać elementy, takie jak ich nazwa użytkownika. Po zakończeniu uwierzytelniania aplikacja musi wrócić do biblioteki MSAL end Url
, która zawiera kod zapewniany przez firmę Microsoft Entra ID. Host obiektu end Url
to zawsze redirectUri
. Aby przechwycić end Url
element , wykonaj jedną z następujących czynności:
- Monitoruj przekierowania przeglądarki do momentu
redirect Url
trafienia. - Przekieruj przeglądarkę do monitorowanego adresu URL.
WithCustomWebUi
to punkt rozszerzalności, którego można użyć do udostępnienia własnego interfejsu użytkownika w publicznych aplikacjach klienckich. Możesz również zezwolić użytkownikom na przejście przez /Authorize
punkt końcowy dostawcy tożsamości i zezwolenie im na logowanie się i wyrażanie zgody. MSAL.NET następnie może zrealizować kod uwierzytelniania i uzyskać token.
Możesz na przykład użyć WithCustomWebUi
w programie Visual Studio, aby aplikacje elektronowe (na przykład Visual Studio Feedback) udostępniały interakcję internetową, ale pozostaw ją MSAL.NET, aby wykonać większość pracy. Możesz również użyć WithCustomWebUi
polecenia , jeśli chcesz zapewnić automatyzację interfejsu użytkownika.
W publicznych aplikacjach klienckich MSAL.NET używa standardu Proof Key for Code Exchange (PKCE) w celu zapewnienia przestrzegania zabezpieczeń. Tylko MSAL.NET może zrealizować kod. Aby uzyskać więcej informacji, zobacz RFC 7636 — klucz weryfikacji dla wymiany kodu przez klientów publicznych protokołu OAuth.
using Microsoft.Identity.Client.Extensions;
Używanie zcustomWebUI
Aby użyć metody WithCustomWebUI
, wykonaj następujące kroki:
Zaimplementuj interfejs
ICustomWebUi
. Aby uzyskać więcej informacji, zobacz tę stronę usługi GitHub.Zaimplementuj jedną
AcquireAuthorizationCodeAsync
metodę i zaakceptuj adres URL kodu autoryzacji, który MSAL.NET obliczenia.Pozwól użytkownikowi przejść przez interakcję z dostawcą tożsamości i zwrócić adres URL używany przez dostawcę tożsamości do wywołania implementacji wraz z kodem autoryzacji. Jeśli masz problemy, implementacja powinna zgłosić wyjątek do współpracy z biblioteką
MsalExtensionException
MSAL.W wywołaniu
AcquireTokenInteractive
użyj.WithCustomUI()
modyfikatora, przekazując wystąpienie niestandardowego internetowego interfejsu użytkownika:result = await app.AcquireTokenInteractive(scopes) .WithCustomWebUi(yourCustomWebUI) .ExecuteAsync();
Zespół MSAL.NET przepisał testy interfejsu użytkownika w celu korzystania z tego mechanizmu rozszerzalności. Jeśli cię interesuje, wyświetl klasę SeleniumWebUI w kodzie źródłowym MSAL.NET.
Doskonałe doświadczenie w pracy z elementem SystemWebViewOptions
W MSAL.NET 4.1 SystemWebViewOptions
można określić:
- Identyfikator URI do przejścia do (
BrowserRedirectError
) lub fragmentu HTML do wyświetlenia (HtmlMessageError
), jeśli w przeglądarce internetowej pojawią się błędy logowania lub zgody. - Identyfikator URI do przejścia do (
BrowserRedirectSuccess
) lub fragmentu HTML do wyświetlenia (HtmlMessageSuccess
), jeśli logowanie lub zgoda zakończy się pomyślnie. - Akcja do uruchomienia w celu uruchomienia przeglądarki systemowej. Możesz zapewnić własną implementację, ustawiając delegata
OpenBrowserAsync
. Klasa udostępnia również domyślną implementację dla dwóch przeglądarek:OpenWithEdgeBrowserAsync
dla przeglądarki Microsoft Edge iOpenWithChromeEdgeBrowserAsync
Microsoft Edge w przeglądarce Chromium.
Aby użyć tej struktury, napisz coś podobnego do następującego przykładu:
IPublicClientApplication app;
...
options = new SystemWebViewOptions
{
HtmlMessageError = "<b>Sign-in failed. You can close this tab ...</b>",
BrowserRedirectSuccess = "https://contoso.com/help-for-my-awesome-commandline-tool.html"
};
var result = app.AcquireTokenInteractive(scopes)
.WithEmbeddedWebView(false) // The default in .NET
.WithSystemWebViewOptions(options)
.Build();
Inne parametry opcjonalne
Aby dowiedzieć się więcej o innych parametrach opcjonalnych dla AcquireTokenInteractive
programu , zobacz AcquireTokenInteractiveParameterBuilder.
Następne kroki
Dowiedz się więcej, tworząc aplikację jednostronicową React (SPA), która loguje użytkowników w poniższej serii samouczków wieloczęściowych.
Eksplorowanie przykładów kodu klasycznego Platforma tożsamości Microsoft