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 .WithParentActivityOrWindowadja 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ék Activity Androidon, UIViewController iOS-en, NSWindow Macen és IWin32WindowIntPr 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ég Dispatcher 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üldi prompt=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üldi prompt=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 üzenettel prompt=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ásik Prompt 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 Urlkell 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 Urltegye 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 WithCustomWebUIkövesse az alábbi lépéseket:

  1. Implementálja az ICustomWebUi felületet. További információkért tekintse meg ezt a GitHub-oldalt.

  2. Implementálhat egy metódust AcquireAuthorizationCodeAsync, és elfogadhatja a számítási MSAL.NET engedélyezési kód URL-címét.

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

  4. 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 SystemWebViewOptionsmegadhatja 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 és OpenWithChromeEdgeBrowserAsync 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 AcquireTokenInteractivekapcsolatban 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.