Webes API-kat hívó asztali alkalmazás: Jogkivonat interaktív beszerzése
Az alábbi példa minimális kódot mutat be, amellyel interaktívan lekérheti a jogkivonatot a felhasználó profiljának a Microsoft Graphtal való olvasásához.
Kód a 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();
}
Kötelező paraméterek
AcquireTokenInteractive
csak egy kötelező paramétert, scopes
. Sztringek számbavételét tartalmazza, amelyek meghatározzák azokat a hatóköröket, amelyekhez jogkivonat szükséges. Ha a jogkivonat a Microsoft Graphhoz készült, a szükséges hatóköröket az egyes Microsoft Graph API-k API-referenciajában, az "Engedélyek" című szakaszban találja. A felhasználó névjegyeinek listázásához például mindkettőt User.Read
és Contacts.Read
hatókört is használnia kell. További információ: Microsoft Graph-engedélyek referenciája.
Asztali és mobilalkalmazások esetén is fontos, hogy a szülőt a használatával .WithParentActivityOrWindow
adja meg. Ez sok esetben követelmény, és az MSAL kivételeket fog eredményezni.
Asztali alkalmazások esetén lásd : Szülőablak fogópontok.
Mobilalkalmazások esetén adja meg Activity
az (Android) vagy UIViewController
az (iOS) elemet.
Választható paraméterek a MSAL.NET
WithParentActivityOrWindow
A felhasználói felület azért fontos, mert interaktív. AcquireTokenInteractive
egy adott opcionális paramétert tartalmaz, amely megadhatja (az azt támogató platformok esetében) a szülő felhasználói felületet. Ha asztali alkalmazásban használja .WithParentActivityOrWindow
, az más típusú, amely a platformtól függ.
Ha nem szeretné szabályozni, hogy a bejelentkezési párbeszédpanel hol jelenik meg a képernyőn, kihagyhatja az opcionális szülőablak paramétert. Ez a beállítás a parancssoron alapuló alkalmazásokra vonatkozik, amelyek hívásokat adnak át bármely más háttérszolgáltatásnak, és nincs szükség windowsra a felhasználói beavatkozáshoz.
// 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).
Megjegyzések:
A .NET Standard esetében a várt
object
értékActivity
Androidon,UIViewController
iOS-en,NSWindow
Macen ésIWin32Window
IntPr
Windowson érhető el.Windows rendszeren a felhasználói felületi szálról kell hívást kezdeményeznie
AcquireTokenInteractive
, hogy a beágyazott böngésző megkapja a megfelelő felhasználói felület szinkronizálási környezetét. Ha a felhasználói felületi szálról nem hív, előfordulhat, hogy az üzenetek nem megfelelően pumpálnak, és holtpontot okoznak a felhasználói felületen. A Microsoft Authentication Library (MSAL) meghívásának egyik módja a felhasználói felületi szálról, ha mégDispatcher
nem használja a felhasználói felületi szálat a Windows megjelenítési alaprendszer (WPF) használatával.Ha WPF-et használ, az osztályt használhatja
WindowInteropHelper.Handle
egy WPF-vezérlő ablakának lekéréséhez. Ezután a hívás egy WPF-vezérlőből (this
):result = await app.AcquireTokenInteractive(scopes) .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle) .ExecuteAsync();
WithPrompt
WithPrompt()
A felhasználóval való interaktivitás szabályozásához adjon meg egy kérést. A pontos viselkedést a Microsoft.Identity.Client.Prompt struktúra segítségével szabályozhatja.
A struktúra a következő állandókat határozza meg:
SelectAccount
kényszeríti a biztonsági jogkivonat-szolgáltatást (STS) a fiókválasztási párbeszédpanel megjelenítésére, amely azokat a fiókokat tartalmazza, amelyekhez a felhasználó munkamenetet használ. Ez az alapértelmezett beállítás. Ez akkor hasznos, ha lehetővé szeretné tenni, hogy a felhasználók különböző identitások közül válasszanak.Ez a beállítás az MSAL-t az identitásszolgáltatónak küldi
prompt=select_account
el. A lehető legjobb élményt nyújtja a rendelkezésre álló információk alapján, például a fiók és a munkamenet jelenléte alapján a felhasználó számára. Ne változtassa meg, hacsak nincs jó oka.Consent
lehetővé teszi, hogy kényszerítse a felhasználót a hozzájárulás megadására, még akkor is, ha az alkalmazás korábban hozzájárulást adott. Ebben az esetben az MSAL elküldiprompt=consent
az identitásszolgáltatónak. Ezt a lehetőséget bizonyos, biztonságra összpontosító alkalmazásokban is használhatja, ahol a szervezet szabályozása megköveteli, hogy a jóváhagyás párbeszédpanel minden alkalommal megjelenjen, amikor a felhasználó megnyitja az alkalmazást.ForceLogin
lehetővé teszi, hogy az alkalmazás kérje meg a felhasználót a hitelesítő adatok megadására, még akkor is, ha ez a felhasználói kérés nem feltétlenül szükséges. Ez a beállítás hasznos lehet, ha a felhasználó ismét bejelentkezik, ha a jogkivonatok beszerzése meghiúsul. Ebben az esetben az MSAL elküldiprompt=login
az identitásszolgáltatónak. A szervezetek néha használják ezt a lehetőséget a biztonságra összpontosító alkalmazásokban, ahol az irányítás megköveteli, hogy a felhasználók minden alkalommal jelentkezzenek be, amikor egy alkalmazás adott részeihez férnek hozzá.Create
a külső identitások regisztrációjának aktiválása az identitásszolgáltatónak küldött üzenettelprompt=create
. Az Azure Active Directory B2C (Azure AD B2C) alkalmazások nem küldhetik el ezt a kérést. További információ: Önkiszolgáló regisztrációs felhasználói folyamat hozzáadása egy alkalmazáshoz.Never
(csak .NET 4.5 és Windows-futtatókörnyezet esetén) nem kéri a felhasználót. Ehelyett a rejtett beágyazott webes nézetben tárolt cookie-t próbálja használni.Ennek a beállításnak a használata sikertelen lehet. Ebben az esetben kivételt küld,
AcquireTokenInteractive
amely értesíti Önt arról, hogy felhasználói felületi interakcióra van szüksége. Ezután használjon egy másikPrompt
paramétert.NoPrompt
nem küld kérést az identitásszolgáltatónak. Az identitásszolgáltató dönti el, hogy melyik bejelentkezési élmény a legjobb a felhasználó számára (egyszeri bejelentkezés vagy fiók kiválasztása).Ez a beállítás kötelező az Azure AD B2C profilszabályzatainak szerkesztéséhez. További információ: Azure AD B2C-specifikusak.
WithUseEmbeddedWebView
Ez a módszer lehetővé teszi annak megadását, hogy a beágyazott WebView vagy a rendszer WebView használatát kényszerítse-e (ha elérhető). További információ: Webböngészők használata.
var result = await app.AcquireTokenInteractive(scopes)
.WithUseEmbeddedWebView(true)
.ExecuteAsync();
WithExtraScopeToConsent
Ez a módosító olyan speciális helyzetekhez készült, ahol azt szeretné, hogy a felhasználó több erőforráshoz is hozzájáruljon, és nem szeretne növekményes hozzájárulást használni. A fejlesztők általában növekményes hozzájárulást használnak MSAL.NET és a Microsoft Identitásplatform. További információ: A felhasználó beleegyezése több erőforráshoz.
var result = await app.AcquireTokenInteractive(scopesForCustomerApi)
.WithExtraScopeToConsent(scopesForVendorApi)
.ExecuteAsync();
WithCustomWebUi
A webes felhasználói felület egy böngésző meghívására szolgáló mechanizmus. Ez a mechanizmus lehet dedikált felhasználói felületi WebBrowser-vezérlő, vagy a böngésző megnyitásának delegálása. Az MSAL webes felhasználói felületi implementációkat biztosít a legtöbb platformhoz, de az alábbi esetekben érdemes lehet saját maga üzemeltetni a böngészőt:
- Olyan platformokkal rendelkezik, amelyeket az MSAL kifejezetten nem fed le, például a Blazort, a Unityt és a Mono-t asztali gépeken.
- Tesztelni szeretné az alkalmazást, és egy Selenium használatával használható automatizált böngészőt szeretne használni.
- A böngésző és az MSAL-t futtató alkalmazás külön folyamatokban van.
Ennek eléréséhez az MSAL-t start Url
kell megadnia, amelyet meg kell jeleníteni egy böngészőben, hogy a felhasználók olyan elemeket adjanak meg, mint a felhasználónév. A hitelesítés befejezése után az alkalmazásnak vissza kell adnia az MSAL-nak end Url
, amely a Microsoft Entra ID által biztosított kódot tartalmazza. A gazdagép end Url
mindig redirectUri
. A lehallgatáshoz end Url
tegye az alábbi műveletek egyikét:
- A böngésző átirányításainak figyelése, amíg el nem
redirect Url
éri a találatot. - A böngészőt átirányíthatja egy figyelt URL-címre.
WithCustomWebUi
egy bővíthetőségi pont, amellyel saját felhasználói felületet biztosíthat a nyilvános ügyfélalkalmazásokban. Azt is engedélyezheti, hogy a felhasználók végighaladjanak az /Authorize
identitásszolgáltató végpontja mellett, és beengedjék őket a bejelentkezésbe és a hozzájárulásba. MSAL.NET ezután beválthatja a hitelesítési kódot, és lekérheti a jogkivonatot.
Használhatja például a Visual Studióban, WithCustomWebUi
hogy az Electron-alkalmazások (például a Visual Studio Feedback) biztosítják a webes interakciót, de a legtöbb munka elvégzésére hagyja MSAL.NET. Akkor is használhatja WithCustomWebUi
, ha felhasználói felület automatizálását szeretné biztosítani.
Nyilvános ügyfélalkalmazásokban MSAL.NET a Code Exchange (PKCE) proof key for Code Exchange (PKCE) szabványt használja a biztonság tiszteletben tartásának biztosítása érdekében. A kódot csak MSAL.NET válthatja be. További információ: RFC 7636 – Proof Key for Code Exchange by OAuth Public Clients.
using Microsoft.Identity.Client.Extensions;
A WithCustomWebUI használata
A használathoz WithCustomWebUI
kövesse az alábbi lépéseket:
Implementálja az
ICustomWebUi
felületet. További információkért tekintse meg ezt a GitHub-oldalt.Implementálhat egy metódust
AcquireAuthorizationCodeAsync
, és elfogadhatja a számítási MSAL.NET engedélyezési kód URL-címét.Hagyja, hogy a felhasználó végighaladjon az identitásszolgáltatóval folytatott interakción, és adja vissza az identitásszolgáltató által a megvalósítás visszahívásához használt URL-címet, valamint az engedélyezési kódot. Ha problémák merülnek fel, a megvalósítás kivételt
MsalExtensionException
képez az MSAL-jal való együttműködés alól.A hívásban
AcquireTokenInteractive
használja a.WithCustomUI()
módosítót az egyéni webes felhasználói felület példányának átadásával:result = await app.AcquireTokenInteractive(scopes) .WithCustomWebUi(yourCustomWebUI) .ExecuteAsync();
A MSAL.NET csapat újraírta a felhasználói felületi teszteket ennek a bővíthetőségi mechanizmusnak a használatához. Ha érdekli, tekintse meg a SeleniumWebUI osztályt a MSAL.NET forráskódban.
Nagyszerű élmény a SystemWebViewOptions használatával
A MSAL.NET 4.1-ben SystemWebViewOptions
megadhatja a következőket:
- A megjelenítendő URI (
BrowserRedirectError
) vagy a megjelenítendő HTML-töredék (HtmlMessageError
), ha bejelentkezési vagy hozzájárulási hibák jelennek meg a rendszer webböngészőjében. - A bejelentkezés vagy a hozzájárulás sikeressége esetén a megjelenítendő
HtmlMessageSuccess
(BrowserRedirectSuccess
) HTML-töredékre () URI. - A rendszerböngésző elindításához futtatandó művelet. A meghatalmazott beállításával saját megvalósítást
OpenBrowserAsync
biztosíthat. Az osztály két böngészőhöz is biztosít alapértelmezett implementációt:OpenWithEdgeBrowserAsync
a Microsoft Edge-hez ésOpenWithChromeEdgeBrowserAsync
a Microsoft Edge-hez a Chromiumon.
A struktúra használatához írjon az alábbi példához hasonlót:
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();
Egyéb választható paraméterek
A további választható paraméterekkel AcquireTokenInteractive
kapcsolatban lásd : AcquireTokenInteractiveParameterBuilder.
Következő lépések
Lépjen tovább a következő cikkre ebben a forgatókönyvben: Webes API meghívása az asztali alkalmazásból.