Megosztás a következőn keresztül:


Üzemeltetett ASP.NET Core Blazor WebAssembly-alkalmazás védelme a Microsoft Entra-azonosítóval

Important

Az üzemeltetett Blazor WebAssembly projektsablon a .NET 8 kiadásával (2023. november) el lett távolítva a keretrendszerből. A cikkben szereplő útmutatás csak a .NET 7-hez vagy korábbi verziókhoz támogatott. Az egyes kiadásokra frissített üzemeltetett Blazor WebAssembly alkalmazások továbbra is terméktámogatást kapnak. Másik lehetőségként alakítsa át az alkalmazást önálló Blazor WebAssembly alkalmazássá vagy Blazor Web App-é.

Ez a cikk bemutatja, hogyan hozhat létre üzemeltetett Blazor WebAssembly megoldási, amely Microsoft Entra-azonosítót (ME-ID) használ a hitelesítéshez. Ez a cikk egyetlen bérlői alkalmazásra összpontosít egyetlen bérlői Azure-alkalmazásregisztrációval.

Ez a cikk nem foglalkozik több-bérlős ME-ID regisztrációs. További információ: Az alkalmazás több-bérlőssé tétele.

Ez a cikk egy Microsoft Entra-bérlő használatát ismerteti, ahogyan a Gyorsindítás: Bérlő beállításaleírásban szerepel. Ha az alkalmazás egy Azure Active Directory B2C-bérlőben van regisztrálva, amint az a oktatóanyagban, az "Azure Active Directory B2C-bérlő létrehozása" című útmutatóban le van írva, de a jelen cikk útmutatását követi, akkor az alkalmazásazonosító URI-ját a ME-ID másként kezeli. További információt a cikk Azure Active Directory B2C-bérlő használata szakaszában talál.

A cikk elolvasása után további biztonsági forgatókönyvekkel kapcsolatban lásd ASP.NET Core Blazor WebAssembly további biztonsági forgatókönyveket.

Walkthrough

Az útmutató alszakaszai az alábbiakat ismertetik:

  • Bérlő létrehozása az Azure-ban
  • Kiszolgálói API-alkalmazás regisztrálása az Azure-ban
  • Ügyfélalkalmazás regisztrálása az Azure-ban
  • Az Blazor alkalmazás létrehozása
  • A Serverappsettings.json konfigurációjának módosítása
  • Az alapértelmezett hozzáférési jogkivonat hatókörséma módosítása
  • Az alkalmazás futtatása

Bérlő létrehozása az Azure-ban

Kövesse rövid útmutató útmutatását: Bérlői beállítása bérlő létrehozásához a ME-ID-ban.

Kiszolgálói API-alkalmazás regisztrálása az Azure-ban

Regisztráljon egy ME-ID-alkalmazást a Server API-alkalmazáshoz:

  1. Lépjen Microsoft Entra-azonosító az Azure Portal. Válassza ki a Alkalmazások>Alkalmazásregisztrációk elemet az oldalsávon. Válassza az Új regisztrációs gombot.
  2. Adjon meg egy név az alkalmazáshoz (például Blazor Server ME-ID).
  3. Válasszon támogatott fióktípusokat. Ehhez a felhasználói felülethez csak (egyetlen bérlő) fiókokat választhatja ki ebben a szervezeti címtárban.
  4. A Server API-alkalmazás ebben a forgatókönyvben nem igényel átirányítási URI-t, ezért hagyja meg a Válassza ki a platformot legördülő listát kijelöletlenül, és ne adjon meg átirányítási URI-t.
  5. Ez a cikk feltételezi, hogy az alkalmazás egy Microsoft Entra-bérlői környezetben van regisztrálva. Ha az alkalmazás regisztrálva van egy Azure Active Directory B2C-bérlőben, akkor a engedélyek>Rendszergazdai hozzájárulás megadása a megnyitáshoz és offline_access engedélyek megadásához, jelölőnégyzet megjelenik és ki van jelölve. A beállítás letiltásához törölje a jelölőnégyzet jelölését. Ha Active Azure Directory-bérlőt használ, a jelölőnégyzet nem jelenik meg.
  6. Válassza a Regisztrálás lehetőséget.

Jegyezze fel a következő adatokat:

  • Server API-alkalmazás alkalmazás (ügyfél) azonosítója (például 00001111-aaaa-2222-bbbb-3333cccc4444)
  • Címtár (bérlő) azonosítója (például aaaabbbb-0000-cccc-1111-dddd2222eeee)
  • ME-ID Elsődleges/Közzétevő/Bérlő tartomány (például contoso.onmicrosoft.com): A tartomány a regisztrált alkalmazás Azure Portaljának Branding paneljén elérhető Publisher-tartományként.

API-engedélyektávolítsa el a Microsoft Graph>User.Read engedélyt, mivel a kiszolgálói API-alkalmazás nem igényel további API-hozzáférést pusztán a felhasználók bejelentkezéséhez és a kiszolgálói API-végpontok meghívásához.

API kitetétel:

  1. Erősítse meg vagy adja hozzá az App ID URI-t, api://{SERVER API APP CLIENT ID} formátumban.
  2. Válassza Hatókör hozzáadásalehetőséget.
  3. Válassza a Mentés ésfolytatása lehetőséget.
  4. Adjon meg egy hatókörnevet (például API.Access).
  5. Adjon meg egy rendszergazdai hozzájárulás megjelenítendő nevét (például Access API).
  6. Adjon meg egy rendszergazdai hozzájárulás leírását (például Allows the app to access server app API endpoints.).
  7. Győződjön meg arról, hogy a Állapot értéke Engedélyezett-ra van állítva.
  8. Válassza Hatókör hozzáadásalehetőséget.

Jegyezze fel a következő adatokat:

  • Alkalmazásazonosító URI GUID (például rekord 00001111-aaaa-2222-bbbb-3333cccc4444 a api://00001111-aaaa-2222-bbbb-3333cccc4444alkalmazásazonosító URI-jából)
  • Hatókör neve (például API.Access)

Important

Ha az alkalmazásazonosító URI-ja egyéni értéket használ, a Server és Client alkalmazások konfigurációs módosításaira is szükség van, miután az alkalmazásokat a Blazor WebAssembly projektsablonból létrehozták. További információért lásd a Egyéni alkalmazásazonosító URI használata szakaszt.

Ügyfélalkalmazás regisztrálása az Azure-ban

Regisztrálja a(z) ME-ID alkalmazást a ügyfélalkalmazáshoz:

  1. Navigáljon az Microsoft Entra ID-ra az Azure portálon. Válassza az oldalsávon az alkalmazásregisztrációk lehetőséget. Válassza az Új regisztrációs gombot.
  2. Adjon meg egy nevet az alkalmazáshoz (például Blazor Ügyfél ME-ID).
  3. Válasszon támogatott fióktípusokat. Ehhez a felhasználói felülethez csak (egyetlen bérlő) fiókokat választhatja ki ebben a szervezeti címtárban.
  4. Állítsa az Átirányítási URI legördülő listát egyoldalas alkalmazás (SPA) értékre, és adja meg a következő átirányítási URI-t: https://localhost/authentication/login-callback. Ha ismeri az Azure alapértelmezett gazda éles átirányítási URI-ját (például azurewebsites.net) vagy az egyéni tartomány gazda éles átirányítási URI-ját (például contoso.com), akkor az éles átirányítási URI-t is hozzáadhatja, amikor az localhost átirányítási URI-t biztosítja. Ügyeljen arra, hogy a hozzáadott átirányítási URI-k között minden nem-:443 port esetében feltüntesse a portszámot.
  5. Ez a cikk feltételezi, hogy az alkalmazás egy Microsoft Entra-bérlői környezetben van regisztrálva. Ha az alkalmazás regisztrálva van egy Azure Active Directory B2C-bérlőben, akkor a engedélyek>Rendszergazdai hozzájárulás megadása a megnyitáshoz és offline_access engedélyek megadásához, jelölőnégyzet megjelenik és ki van jelölve. A beállítás letiltásához törölje a jelölőnégyzet jelölését. Ha Active Azure Directory-bérlőt használ, a jelölőnégyzet nem jelenik meg.
  6. Válassza a Regisztrálás lehetőséget.

Note

Nem szükséges megadni egy localhost ME-ID átirányítási URI portszámát. További információért tekintse meg a Átirányítási URI (válasz URL-cím) korlátozásait: localhost kivételek (Entra dokumentáció).

Rögzítse az Client alkalmazásalkalmazás (ügyfél) azonosítóját (például 11112222-bbbb-3333-cccc-4444dddd5555).

Hitelesítési>Platformkonfigurációk>Egyoldalas Alkalmazás:

  1. Ellenőrizze, hogy a https://localhost/authentication/login-callback átirányítási URI-ja jelen van-e.
  2. Az Implicit engedély szakaszban győződjön meg arról, hogy a hozzáférési tokenek és a azonosító tokenek jelölőnégyzetei nincsenek kiválasztva. Az implicit engedélyezés nem ajánlott az MSAL 2.0-s vagy újabb verzióját használó Blazor alkalmazásokhoz. További információ: Secure ASP.NET Core Blazor WebAssembly.
  3. Az alkalmazás többi alapértelmezett értéke elfogadható ehhez az élményhez.
  4. Ha módosításokat végzett, válassza a Mentés gombot.

API-engedélyek:

  1. Győződjön meg arról, hogy az alkalmazás rendelkezik Microsoft Graph>User.Read engedéllyel.
  2. Válassza a Engedély hozzáadása, ezt követően a Saját API-klehetőséget.
  3. Válassza ki a Server API-alkalmazás a Név oszlopból (például Blazor Server ME-ID). Az alkalmazásregisztráció tulajdonosának kell lennie (és külön alkalmazás esetén az API-alkalmazásregisztrációnak) ahhoz, hogy láthassa az API-t az Azure Portal Saját API-k területén. További információért lásd: Az alkalmazástulajdonos hozzárendelése (Microsoft Entra dokumentáció).
  4. Nyissa meg a API listáját.
  5. Engedélyezze az API-hoz való hozzáférést (például API.Access).
  6. Válassza az Engedélyek hozzáadásalehetőséget.
  7. Válassza a Rendszergazdai hozzájárulás megadása a(z) {TENANT NAME} gombhoz. A megerősítéshez válassza az Igen lehetőséget.

Important

Ha nincs jogosultsága rendszergazdai hozzájárulást adni a bérlőnek API-engedélyek utolsó lépésében konfigurációhoz, mert az alkalmazás használatának engedélyezése delegálva van a felhasználók számára, akkor a következő további lépéseket kell elvégeznie:

  • Az alkalmazásnak megbízható kiadói tartományt kell használnia.
  • Az Server alkalmazás konfigurációjában az Azure portálon válassza a API-közzététele lehetőséget. Az Engedélyezett ügyfélalkalmazásokterületen válassza ki a gombot, Ügyfélalkalmazás hozzáadása. Adja hozzá a Client alkalmazás (ügyfél) azonosítóját (például 11112222-bbbb-3333-cccc-4444dddd5555).

Az Blazor alkalmazás létrehozása

Üres mappában cserélje le a következő parancs helyőrzőit a korábban rögzített adatokra, és hajtsa végre a parancsot egy parancshéjban:

dotnet new blazorwasm -au SingleOrg --api-client-id "{SERVER API APP CLIENT ID}" --app-id-uri "{SERVER API APP ID URI GUID}" --client-id "{CLIENT APP CLIENT ID}" --default-scope "{DEFAULT SCOPE}" --domain "{TENANT DOMAIN}" -ho -o {PROJECT NAME} --tenant-id "{TENANT ID}"

Warning

Kerülje a kötőjelek (-) használatát az alkalmazásnévben {PROJECT NAME}, amelyek megszakítják az OIDC-alkalmazásazonosító létrehozását. A Blazor WebAssembly projektsablon logikája egy OIDC-alkalmazásazonosító projektnevét használja a megoldás konfigurációjában. A Pascal-eset (BlazorSample) vagy aláhúzás (Blazor_Sample) elfogadható alternatívát jelentenek. További információért lásd: A kötőjelek egy üzemeltetett Blazor WebAssembly projekt nevében megszakíthatják az OIDC biztonságát (dotnet/aspnetcore #35337).

Placeholder Az Azure portál neve Example
{PROJECT NAME} BlazorSample
{CLIENT APP CLIENT ID} Az Client alkalmazás (ügyfél) azonosítója 11112222-bbbb-3333-cccc-4444dddd5555
{DEFAULT SCOPE} Hatókör neve API.Access
{SERVER API APP CLIENT ID} A Server API-alkalmazás alkalmazásának (ügyfél) azonosítója 00001111-aaaa-2222-bbbb-3333cccc4444
{SERVER API APP ID URI GUID} Alkalmazásazonosító URI GUID azonosítója 00001111-aaaa-2222-bbbb-3333cccc4444 (CSAK GUID, azonos a {SERVER API APP CLIENT ID})
{TENANT DOMAIN} Elsődleges/közzétevő/bérlői tartomány contoso.onmicrosoft.com
{TENANT ID} Címtár (bérlő) azonosítója aaaabbbb-0000-cccc-1111-dddd2222eeee

A -o|--output beállítással megadott kimeneti hely létrehoz egy projektmappát, ha az nem létezik, és a projekt nevének részévé válik. Kerülje a kötőjelek (-) használatát az alkalmazás nevében, amely megszakítja az OIDC-alkalmazásazonosító létrehozását (lásd a korábbi FIGYELMEZTETÉSt).

Important

Ha az alkalmazásazonosító URI-ja egyéni értéket használ, a Server és Client alkalmazások konfigurációs módosításaira is szükség van, miután az alkalmazásokat a Blazor WebAssembly projektsablonból létrehozták. További információért lásd a Egyéni alkalmazásazonosító URI használata szakaszt.

Az alkalmazás futtatása

Indítsa el az alkalmazást a Server projektből. A Visual Studio használatakor válasszon a következő lehetőségek közül:

  • Válassza a Futtatás gomb melletti legördülő nyilat. Nyissa meg Indítási projektek konfigurálása legördülő listából. Válassza az Egyszeri indítású projekt lehetőséget. Erősítse meg vagy módosítsa az induló projektet a Server projektre.

  • Győződjön meg arról, hogy a Server projekt ki van emelve a Megoldáskezelőben, mielőtt az alkalmazást az alábbi módszerekkel elindítja:

    • Válassza a Futtatás gombot.
    • Használja a hibakeresés>Hibakeresés indítása lehetőséget a menüből.
    • Nyomja le az F5 billentyűt.
  • A parancshéjban keresse meg a megoldás Server projektmappáját. Hajtsa végre a dotnet watch (vagy dotnet run) parancsot.

User.Identity.Name konfigurálása

Az ebben a szakaszban található útmutató a User.Identity.Name jogcím értékével történő name opcionális kitöltését ismerteti.

A Server alkalmazás API a User.Identity.Name jogcímtípus (például http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) értékével tölti fel a bbbb0000-cccc-1111-dddd-2222eeee3333@contoso.onmicrosoft.com-et.

Ha úgy szeretné konfigurálni az alkalmazást, hogy megkapja az értéket a name jogcímtípusból:

A megoldás részei

Ez a szakasz a Blazor WebAssembly projektsablonból létrehozott megoldás részeit ismerteti, és ismerteti, hogy a megoldás Client és Server projektjei hogyan vannak konfigurálva referenciaként. Ebben a szakaszban nem talál konkrét útmutatást egy alapszintű munkaalkalmazáshoz, ha az alkalmazást az útmutató szakaszban található útmutatással hozta létre. Az ebben a szakaszban található útmutató segítséget nyújt egy alkalmazás frissítéséhez a felhasználók hitelesítéséhez és engedélyezéséhez. Az alkalmazások frissítésének alternatív módszere azonban az, ha az útmutató szakasz útmutatásából új alkalmazást hoz létre, és áthelyezi az alkalmazás összetevőit, osztályait és erőforrásait az új alkalmazásba.

appsettings.json konfigurációja

Ez a szakasz a megoldás Server alkalmazására vonatkozik.

A appsettings.json fájl tartalmazza a hozzáférési jogkivonatok érvényesítéséhez használt JWT-tulajdonoskezelő konfigurálására szolgáló beállításokat. Adja hozzá a következő AzureAd konfigurációs szakaszt:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "{TENANT DOMAIN}",
    "TenantId": "{TENANT ID}",
    "ClientId": "{SERVER API APP CLIENT ID}",
    "CallbackPath": "/signin-oidc",
    "Scopes": "{SCOPES}"
  }
}

Example:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "contoso.onmicrosoft.com",
    "TenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
    "CallbackPath": "/signin-oidc",
    "Scopes": "API.Access"
  }
}

Important

Ha a Server alkalmazás regisztrálva van egy egyéni alkalmazásazonosító URI használatára ME-ID (nem az alapértelmezett api://{SERVER API APP CLIENT ID}formátumban), tekintse meg az Egyéni alkalmazásazonosító URI szakaszát. A Server és Client alkalmazásokban is szükség van módosításokra.

Hitelesítési csomag

Ez a szakasz a megoldás Server alkalmazására vonatkozik.

Az Microsoft.Identity.Web csomag támogatja a ASP.NET Core webes API-k és a Microsoft identitásplatform használatával indított hívások hitelesítését és engedélyezését.

Note

A csomagok .NET-alkalmazásokhoz való hozzáadásáról a Csomagok telepítése és kezeléseCsomaghasználati munkafolyamat (NuGet-dokumentáció)című cikkben talál útmutatást. Ellenőrizze a megfelelő csomagverziókat a NuGet.org.

A Server sablonból létrehozott üzemeltetett Blazor-megoldás Blazor WebAssembly alkalmazása tartalmazza a Microsoft.Identity.Web.UI csomagot. A csomag felhasználói felületet ad hozzá a felhasználói hitelesítéshez a webalkalmazásokban, és a Blazor keretrendszer nem használja. Ha a Server alkalmazás nem használható közvetlenül a felhasználók hitelesítésére, nyugodtan eltávolíthatja a csomaghivatkozást a Server alkalmazás projektfájljából.

Hitelesítési szolgáltatás támogatása

Ez a szakasz a megoldás Server alkalmazására vonatkozik.

A AddAuthentication metódus beállítja az alkalmazáson belüli hitelesítési szolgáltatásokat, és a JWT Bearer kezelőt állítja be alapértelmezett hitelesítési módszerként. A AddMicrosoftIdentityWebApi metódus úgy konfigurálja a szolgáltatásokat, hogy megvédjék a webes API-t a Microsoft Identity Platform 2.0-s verziójával. Ez a módszer egy AzureAd szakaszt vár az alkalmazás konfigurációjában a hitelesítési beállítások inicializálásához szükséges beállításokkal.

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"));

Note

Ha egyetlen hitelesítési sémát regisztrál, a rendszer automatikusan az alkalmazás alapértelmezett sémájaként használja a hitelesítési sémát, és nem szükséges a sémát AddAuthentication vagy AuthenticationOptionskeresztül állapotba tenni. További információkért lásd: ASP.NET Core Authentication áttekintését és a ASP.NET Core közleményt (aspnet/Announcements #490).

UseAuthentication és UseAuthorization biztosítják, hogy:

  • Az alkalmazás megpróbálja elemezni és ellenőrizni a tokeneket a bejövő kérésekre.
  • Minden olyan kérés, amely megfelelő hitelesítő adatok nélkül próbál hozzáférni egy védett erőforráshoz, meghiúsul.
app.UseAuthentication();
app.UseAuthorization();

WeatherForecast vezérlő

Ez a szakasz a megoldás Server alkalmazására vonatkozik.

A WeatherForecast vezérlő (Controllers/WeatherForecastController.cs) egy védett API-t tesz elérhetővé a vezérlőre alkalmazott [Authorize] attribútummal. Fontos megérteni, hogy:

  • Ebben az API-vezérlőben az [Authorize] attribútum az egyetlen dolog, amely megvédi ezt az API-t a jogosulatlan hozzáféréstől.
  • A [Authorize] attribútum, amelyet a Blazor WebAssembly alkalmazásban használnak, csak arra szolgál, hogy jelezze az alkalmazásnak, a felhasználót engedélyezni kell az alkalmazás megfelelő működéséhez.
[Authorize]
[ApiController]
[Route("[controller]")]
[RequiredScope(RequiredScopesConfigurationKey = "AzureAd:Scopes")]
public class WeatherForecastController : ControllerBase
{
    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        ...
    }
}

wwwroot/appsettings.json konfigurációja

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A konfigurációt a wwwroot/appsettings.json fájl adja meg:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/{TENANT ID}",
    "ClientId": "{CLIENT APP CLIENT ID}",
    "ValidateAuthority": true
  }
}

Example:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
    "ClientId": "11112222-bbbb-3333-cccc-4444dddd5555",
    "ValidateAuthority": true
  }
}

Hitelesítési csomag

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

Ha egy alkalmazás munkahelyi vagy iskolai fiókok (SingleOrg) használatára jön létre, az alkalmazás automatikusan megkapja a Microsoft Authentication Library (Microsoft.Authentication.WebAssembly.Msal) csomaghivatkozását. A csomag primitívek készletét biztosítja, amelyek segítenek az alkalmazásnak hitelesíteni a felhasználókat, és jogkivonatokat szerezni a védett API-k meghívásához.

Ha hitelesítést ad hozzá egy alkalmazáshoz, manuálisan adja hozzá a Microsoft.Authentication.WebAssembly.Msal csomagot az alkalmazáshoz.

Note

A csomagok .NET-alkalmazásokhoz való hozzáadásáról a Csomagok telepítése és kezeléseCsomaghasználati munkafolyamat (NuGet-dokumentáció)című cikkben talál útmutatást. Ellenőrizze a megfelelő csomagverziókat a NuGet.org.

A Microsoft.Authentication.WebAssembly.Msal csomag tranzitív módon hozzáadja a Microsoft.AspNetCore.Components.WebAssembly.Authentication csomagot az alkalmazáshoz.

Hitelesítési szolgáltatás támogatása

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A HttpClient-példányok támogatása a hozzáférési jogkivonatokat is magában foglalja a Server alkalmazásra irányuló kérések során.

A Program fájlban:

builder.Services.AddHttpClient("{PROJECT NAME}.ServerAPI", client => 
        client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
    .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
    .CreateClient("{PROJECT NAME}.ServerAPI"));

A {PROJECT NAME} helyőrző a projekt neve a megoldás létrehozásakor. Ha például a projekt neve BlazorSample, ez HttpClientnevű BlazorSample.ServerAPI-et eredményez.

A felhasználók hitelesítésének támogatása a szolgáltatástárolóban a AddMsalAuthentication csomag által biztosított Microsoft.Authentication.WebAssembly.Msal bővítménymetódussal van regisztrálva. Ez a metódus beállítja azokat a szolgáltatásokat, amelyek szükségesek ahhoz, hogy az alkalmazás kommunikáljon a Identity Szolgáltatóval (IP-címmel).

A Program fájlban:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
    options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});

A AddMsalAuthentication metódus egy visszahívást fogad el az alkalmazás hitelesítéséhez szükséges paraméterek konfigurálásához. Az alkalmazás konfigurálásához szükséges értékek az Azure Portal ME-ID konfigurációjából kérhetők le az alkalmazás regisztrálásakor.

Hozzáférési jogkivonat hatókörei

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

Az alapértelmezett hozzáférési jogkivonat-hatókörök a következő hozzáférési jogkivonat-hatókörök listáját jelölik:

  • Szerepel a bejelentkezési kérelemben.
  • A hozzáférési jogkivonat közvetlenül a hitelesítést követően történő létrehozásához használatos.

A Program fájlban szükség szerint további hatókörök is hozzáadhatók:

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});

Adja meg a(z) AdditionalScopesToConsenttovábbi hatóköröket:

options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");

Note

AdditionalScopesToConsent nem tud delegált felhasználói engedélyeket kiépíteni a Microsoft Graph számára a Microsoft Entra ID hozzájárulási felhasználói felületén keresztül, amikor egy felhasználó először használ egy Microsoft Azure-ban regisztrált alkalmazást. A további információt a következőben találja: A Graph API használata ASP.NET Core Blazor WebAssembly.

Példa alapértelmezett hozzáférési jogkivonat hatóköre:

options.ProviderOptions.DefaultAccessTokenScopes.Add(
    "api://00001111-aaaa-2222-bbbb-3333cccc4444/API.Access");

További információt a További forgatókönyvek című cikk alábbi szakaszaiban talál:

Bejelentkezési mód

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A keretrendszer alapértelmezés szerint előugró bejelentkezési módra vált, és visszavált az átirányítási bejelentkezési módra, ha egy előugró ablak nem nyitható meg. Az MSAL konfigurálása az átirányítási bejelentkezési mód használatára a LoginModeMsalProviderOptions tulajdonság redirect beállításával:

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.LoginMode = "redirect";
});

Az alapértelmezett beállítás popup, és a karaktersor értéke nem érzékeny a kis- és nagybetűkre.

Fájl importálása

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A Microsoft.AspNetCore.Components.Authorization névtér az alkalmazás teljes területén elérhetővé válik a _Imports.razor fájlon keresztül:

...
@using Microsoft.AspNetCore.Components.Authorization
...

Indexlap

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

Az Indexlap (wwwroot/index.html) oldal tartalmaz egy szkriptet, amely meghatározza a JavaScriptben található AuthenticationService. AuthenticationService kezeli az OIDC protokoll alacsony szintű részleteit. Az alkalmazás belsőleg meghívja a szkriptben meghatározott metódusokat a hitelesítési műveletek végrehajtásához.

<script src="_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>

Alkalmazásösszetevő

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A App összetevő (App.razor) hasonló az App alkalmazásokban található Blazor Server összetevőhöz:

  • A CascadingAuthenticationState összetevő kezeli a AuthenticationState felfedését az alkalmazás többi részének.
  • A AuthorizeRouteView összetevő gondoskodik arról, hogy az aktuális felhasználó hozzáférhessen egy adott laphoz, vagy más módon renderelje a RedirectToLogin összetevőt.
  • A RedirectToLogin összetevő kezeli a jogosulatlan felhasználók bejelentkezési lapra való átirányítását.

Az ASP.NET Core kiadásai során a keretrendszerben bekövetkezett változások miatt a Razor összetevő (App) App.razor jelölése nem jelenik meg ebben a szakaszban. Az összetevő egy adott kiadásra vonatkozó jelölésének vizsgálatához használja az alábbi módszerek:

  • Hozzon létre egy hitelesítéshez kiépített alkalmazást a használni kívánt ASP.NET Core alapértelmezett Blazor WebAssembly projektsablonjából. Vizsgálja meg a App összetevőt (App.razor) a létrehozott alkalmazásban.

  • Vizsgálja meg a App összetevőtApp.razora referenciaforrásban. Válassza ki a verziót az ágválasztóból, és keresse meg az összetevőt az adattár ProjectTemplates mappájában, mert az App összetevő helye az évek során megváltozott.

    Note

    A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék váltó legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.

RedirectToLogin összetevő

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A RedirectToLogin összetevő (RedirectToLogin.razor):

  • Kezeli a jogosulatlan felhasználók bejelentkezési lapra való átirányítását.
  • A felhasználó által elérni kívánt aktuális URL-címet a rendszer úgy tartja karban, hogy vissza lehessen adni őket az adott oldalra, ha a hitelesítés sikeres:
    • Navigációs előzményállapot az ASP.NET Core-ban a .NET 7 vagy újabb verzióiban.
    • A lekérdezési karakterlánc ASP.NET Core-ban .NET 6-ban vagy korábbi verziókban.

Vizsgálja meg a RedirectToLogin összetevőt a referenciaforrásban. Az összetevő helye idővel megváltozott, ezért a GitHub keresőeszközei segítségével keresse meg az összetevőt.

A bejelentkezési útvonalat az alkalmazás testre szabhatja (RemoteAuthenticationApplicationPathsOptions.LogInPatha keretrendszer alapértelmezései (dotnet/aspnetcorereferenciaforrás)). A projektsablon RedirectToLogin összetevője az alapértelmezett bejelentkezési útvonalat authentication/loginhasználja.

Note

A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék váltó legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.

Ha egy alkalmazás testre szabja a bejelentkezési útvonalat, kövesse az alábbi módszerek egyikét:

  • Egyezzen az összetevőben lévő, rögzített sztring elérési útjára RedirectToLogin .

  • Injektáljuk RemoteAuthenticationOptions a konfigurált érték beolvasásához. Ezt a megközelítést például akkor érdemes alkalmazni, ha az elérési utat a következővel AddApiAuthorizationszabja testre: Adja hozzá a következő irányelveket az RedirectToLogin összetevő tetején:

    @using Microsoft.Extensions.Options
    @inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> RemoteOptions
    

    Módosítsa az összetevő átirányítását a OnInitialized metódusban:

    - Navigation.NavigateToLogin("authentication/login");
    + Navigation.NavigateToLogin(RemoteOptions.Get(Options.DefaultName)
    +     .AuthenticationPaths.LogInPath);
    

    Note

    Ha más útvonalak eltérnek a projektsablon vagy a keretrendszer alapértelmezett elérési útjaitól, azokat ugyanúgy kell kezelni.

LoginDisplay összetevő

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A LoginDisplay összetevő (LoginDisplay.razor) a MainLayout összetevőben (MainLayout.razor) jelenik meg, és a következő viselkedéseket kezeli:

  • Hitelesített felhasználók esetén:
    • Megjeleníti az aktuális felhasználónevet.
    • A ASP.NET Core Identityfelhasználói profillapjára mutató hivatkozást kínál.
    • Egy gombot kínál az alkalmazásból való kijelentkezéshez.
  • Névtelen felhasználók számára:
    • Lehetőséget kínál a regisztrációra.
    • Lehetőséget kínál a bejelentkezésre.

A keretrendszerben a ASP.NET Core kiadásaiban bekövetkezett változások miatt ebben a szakaszban nem jelenik meg az Razor összetevőre vonatkozó LoginDisplay korrektúra. Az összetevő egy adott kiadásra vonatkozó jelölésének vizsgálatához használja az alábbi módszerek:

  • Hozzon létre egy hitelesítéshez kiépített alkalmazást a használni kívánt ASP.NET Core alapértelmezett Blazor WebAssembly projektsablonjából. Vizsgálja meg a létrehozott alkalmazás LoginDisplay összetevőjét.

  • Vizsgálja meg a LoginDisplay összetevőt a referenciaforrásban. Az összetevő helye idővel megváltozott, ezért a GitHub keresőeszközei segítségével keresse meg az összetevőt. A rendszer a Hosted egyenlő true sablon szerinti tartalmát használja.

    Note

    A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék váltó legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.

Hitelesítési összetevő

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A Authentication összetevő (Pages/Authentication.razor) által létrehozott oldal határozza meg a különböző hitelesítési szakaszok kezeléséhez szükséges útvonalakat.

A RemoteAuthenticatorView összetevő:

@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication

<RemoteAuthenticatorView Action="@Action" />

@code {
    [Parameter]
    public string? Action { get; set; }
}

Note

A null értékű referenciatípusok (NRT-k) és a .NET fordító nullállapotú statikus elemzése a .NET 6 vagy újabb verzióit támogató ASP.NET Core esetén van támogatva. A .NET 6-ban a ASP.NET Core kiadása előtt a string típus null típusú megjelölés (?) nélkül jelenik meg.

FetchData összetevő

Ez a szakasz a megoldás Client alkalmazására vonatkozik.

A FetchData összetevő a következő lépéseket mutatja be:

  • Hozzáférési jogkivonat létrehozása.
  • A hozzáférési jogkivonat használatával meghívhat egy védett erőforrás API-t a Server alkalmazásban.

A @attribute [Authorize] irányelv azt jelzi a Blazor WebAssembly engedélyezési rendszernek, hogy a felhasználót engedélyezni kell a komponens felkereséséhez. Az attribútum jelenléte az Client alkalmazásban nem akadályozza meg, hogy a kiszolgáló API-ja megfelelő hitelesítő adatok nélkül legyen meghívva. Az Server alkalmazásnak [Authorize] kell használnia a megfelelő végpontokon a megfelelő védelem érdekében.

IAccessTokenProvider.RequestAccessToken gondoskodik egy hozzáférési jogkivonat kéréséről, amely hozzáadható az API meghívására irányuló kéréshez. Ha a jogkivonat gyorsítótárazva van, vagy a szolgáltatás felhasználói beavatkozás nélkül tud kiépíteni egy új hozzáférési jogkivonatot, a jogkivonat-kérés sikeres lesz. Ellenkező esetben a jogkivonat-kérés AccessTokenNotAvailableExceptionhibával meghiúsul, amelyet egy try-catch utasítás fog le.

Ahhoz, hogy lekérje a kérésbe belefoglalandó tényleges jogkivonatot, az alkalmazásnak ellenőriznie kell, hogy a kérés sikeres volt-e tokenResult.TryGetToken(out var token)meghívásával.

Ha a kérés sikeres volt, a jogkivonat változója fel lesz töltve a hozzáférési jogkivonattal. A AccessToken.Value tulajdonsága kiteszi a szó szerinti sztringet, amelyet bele kell foglalni a Authorization kérés fejlécébe.

Ha a jelző nem volt konfigurálható felhasználói beavatkozás nélkül, ami sikertelen kérést eredményezett:

  • ASP.NET Core a .NET 7-ben vagy újabb verziókban: Az alkalmazás a megadott AccessTokenResult.InteractiveRequestUrl használatával navigál a AccessTokenResult.InteractionOptions célba, hogy engedje a hozzáférési jogkivonat frissítését.
  • ASP.NET Core a .NET 6-os vagy korábbi verziójában: A token eredménye egy átirányító URL-t tartalmaz. Az URL-címre lépve a felhasználó a bejelentkezési oldalra kerül, és a sikeres hitelesítés után visszaáll az aktuális lapra.
@page "/fetchdata"
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using {APP NAMESPACE}.Shared
@attribute [Authorize]
@inject HttpClient Http

...

@code {
    private WeatherForecast[] forecasts;

    protected override async Task OnInitializedAsync()
    {
        try
        {
            forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");
        }
        catch (AccessTokenNotAvailableException exception)
        {
            exception.Redirect();
        }
    }
}

Az Azure Active Directory B2C-bérlő használata

Ha az alkalmazás egy Azure Active Directory B2C-bérlőben van regisztrálva, amint az a oktatóanyagban, az "Azure Active Directory B2C-bérlő létrehozása" című útmutatóban le van írva, de a jelen cikk útmutatását követi, akkor az alkalmazásazonosító URI-ját a ME-ID másként kezeli.

A meglévő bérlő típusának ellenőrzéséhez válassza a Bérlők kezelése hivatkozást a ME-ID szervezet Áttekintéstetején. Vizsgálja meg a szervezet bérlőtípusának oszlopértékét. Ez a szakasz azokra az alkalmazásokra vonatkozik, amelyek a jelen cikkben ismertetett útmutatást követik, de Azure Active Directory B2C-bérlőben vannak regisztrálva.

A api://{SERVER API APP CLIENT ID OR CUSTOM VALUE}formátumnak megfelelő alkalmazásazonosító URI helyett az alkalmazásazonosító URI formátuma https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}. Ez a különbség Client és Server alkalmazáskonfigurációkat érinti:

  • A kiszolgálói API-alkalmazás esetében állítsa be az alkalmazásbeállítások fájljában (Audience) található appsettings.json úgy, hogy az megfeleljen az Azure Portal által biztosított célközönségnek (alkalmazásazonosító URI) a záró perjel nélkül:

    "Audience": "https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}"
    

    Example:

    "Audience": "https://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444"
    
  • A Program alkalmazás Client fájljában állítsa be a hatókör célközönségét (alkalmazásazonosító URI) a kiszolgáló API-alkalmazás célközönségének megfelelően:

    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}/{DEFAULT SCOPE}");
    

    Az előző hatókörben az alkalmazásazonosító URI/célközönsége az érték https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE} része, amely nem tartalmaz záró perjelet (/), és nem tartalmazza a hatókör nevét ({DEFAULT SCOPE}).

    Example:

    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444/API.Access");
    

    Az előző hatókörben az alkalmazásazonosító URI/célközönsége az érték https://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444 része, amely nem tartalmaz záró perjelet (/), és nem tartalmazza a hatókör nevét (API.Access).

Egyéni alkalmazásazonosító URI használata

Ha az alkalmazásazonosító URI-ja egyéni érték, manuálisan frissítenie kell az alapértelmezett hozzáférési jogkivonat hatókörének URI-ját a Client alkalmazásban, és hozzá kell adnia a célközönséget a Server alkalmazás ME-ID konfigurációjába.

Important

Az alábbi konfiguráció nem szükséges a api://{SERVER API APP CLIENT ID}alapértelmezett alkalmazásazonosító URI-jának használatakor.

Példa a urn://custom-app-id-uri alkalmazásazonosítójára és a API.Accesshatókörének nevére:

  • Az Program alkalmazás Client fájljában:

    options.ProviderOptions.DefaultAccessTokenScopes.Add(
        "urn://custom-app-id-uri/API.Access");
    
  • A appsettings.json containeren belül a Server alkalmazásban adjon hozzá egy Audience bejegyzést, amelynél csak a alkalmazásazonosító URI van megadva, záró perjel nélkül.

    "Audience": "urn://custom-app-id-uri"
    

Troubleshoot

Logging

Ha engedélyezni szeretné a hibakeresést vagy a nyomkövetési naplózást a hitelesítéshezBlazor WebAssembly, tekintse meg a Blazor szakaszát, amelyben a cikk verzióválasztója ASP.NET Core a .NET 7-es vagy újabb verziójában.

Gyakori hibák

  • Az alkalmazás vagy Identity szolgáltató (IP) helytelen konfigurálása

    A leggyakoribb hibákat a helytelen konfiguráció okozza. Az alábbiakban néhány példát láthat:

    • A forgatókönyv követelményeitől függően egy hiányzó vagy helytelen szolgáltató, példány, bérlőazonosító, bérlői tartomány, ügyfélazonosító vagy átirányítási URI megakadályozza, hogy egy alkalmazás hitelesítse az ügyfeleket.
    • A helytelen kérelemtartományok megakadályozzák, hogy az ügyfelek hozzáférjenek a kiszolgáló webes API-végpontjaihoz.
    • Helytelen vagy hiányzó kiszolgálói API-engedélyek megakadályozzák, hogy az ügyfelek hozzáférjenek a kiszolgáló webes API-végpontjaihoz.
    • Az alkalmazás futtatása más porton, mint ahogyan az az IP-alkalmazás regisztrációjának átirányítási URI-jában be van állítva. Vegye figyelembe, hogy a Microsoft Entra-azonosítóhoz és egy localhost fejlesztési tesztelési címen futó alkalmazáshoz nincs szükség portra, de az alkalmazás portkonfigurációjának és a portnak, amelyen az alkalmazás fut, meg kell egyeznie a nemlocalhost címekhez.

    A cikk útmutatójának konfigurációs szakaszai példákat mutatnak a helyes konfigurációra. Gondosan ellenőrizze a cikk egyes szakaszait, hogy az alkalmazás és az IP-cím helytelenül van-e konfigurálva.

    Ha a konfiguráció helyesnek tűnik:

    • Alkalmazásnaplók elemzése.

    • Vizsgálja meg az ügyfélalkalmazás és az IP- vagy kiszolgálóalkalmazás közötti hálózati forgalmat a böngésző fejlesztői eszközeivel. Az IP vagy a kiszolgálóalkalmazás gyakran visszaad egy pontos hibaüzenetet vagy egy a probléma okára utaló üzenetet a kliensnek egy kérés után. A fejlesztői eszközökkel kapcsolatos útmutatást a következő cikkekben találja:

    • A Blazor kiadásoknál, ahol JSON Web Token (JWT) kerül alkalmazásra, dekódolja a kliens hitelesítésére vagy a szerver webes API-hoz való hozzáférésre használt token tartalmát, attól függően, hogy a probléma hol lép fel. További információ: JSON-webjogkivonat (JWT) tartalmának vizsgálata.

    A dokumentációs csapat válaszol a cikkekben szereplő dokumentumokkal kapcsolatos visszajelzésekre és hibákra (nyisson meg egy hibát a Ezen az oldalon visszajelzési szakaszból), de nem tud terméktámogatást nyújtani. Számos nyilvános támogatási fórum áll rendelkezésre az alkalmazások hibaelhárításához. A következőket javasoljuk:

    Az előző fórumok nem a Microsoft tulajdonában vagy ellenőrzése alatt állnak.

    A nem biztonsági, nem érzékeny és nem bizalmas, reprodukálható keretrendszer hibajelentései esetén nyisson meg egy kérdést az ASP.NET Core termékegységgel. Ne nyisson meg egy problémát a termékegységben, amíg nem vizsgálja meg alaposan a probléma okát, és nem tudja önállóan és a közösség segítségével megoldani a problémát egy nyilvános támogatási fórumon. A termékegység nem tudja elhárítani a külső szolgáltatásokat érintő egyszerű helytelen konfiguráció vagy használati esetek miatt hibásan működő egyes alkalmazásokat. Ha egy jelentés bizalmas jellegű, vagy a kiberbűnözők által kihasználható termék biztonsági hibáját írja le, tekintse meg Biztonsági problémák és hibák jelentésével (dotnet/aspnetcore GitHub-adattár).

  • Jogosulatlan ME-ID ügyfél

    info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Az engedélyezés nem sikerült. Ezek a követelmények nem teljesültek: DenyAnonymousAuthorizationRequirement: Hitelesített felhasználót igényel.

    Bejelentkezési visszahívási hiba a ME-ID-ből:

    • Hiba: unauthorized_client
    • Leírás: AADB2C90058: The provided application is not configured to allow public clients.

    A hiba megoldása:

    1. Az Azure Portalon érheti el a alkalmazás jegyzékfájlját.
    2. Állítsa a allowPublicClient attribútumotnull vagy trueértékre.

Cookie-k és webhelyadatok

A cookie-k és a webhelyadatok az alkalmazásfrissítések során is megmaradhatnak, és zavarhatják a tesztelést és a hibaelhárítást. Törölje az alábbiakat, amikor az alkalmazáskódot, a felhasználói fiókot a szolgáltatónál, vagy a szolgáltatói alkalmazás konfigurációját módosítja:

  • Felhasználói bejelentkezési cookie-k
  • Alkalmazás cookie-k
  • Gyorsítótárazott és tárolt webhelyadatok

A cookie-k és a webhelyadatok tesztelést és hibaelhárítást zavaró hatásának megelőzésére szolgáló egyik módszer az, hogy:

  • Böngésző konfigurálása
    • Használjon egy böngészőt a teszteléshez, amely konfigurálható az összes cookie és webhelyadatok törlésére minden alkalommal, amikor a böngésző bezárul.
    • Győződjön meg arról, hogy a böngésző manuálisan vagy az IDE által bezárva van az alkalmazás, a tesztfelhasználó vagy a szolgáltató konfigurációjának bármilyen módosításához.
  • Egyéni paranccsal nyisson meg egy böngészőt InPrivate vagy Inkognitó módban a Visual Studióban:
    • Nyissa meg a Visual Studio Futtatás gombjának használatával a Tallózás párbeszédpanelt.
    • Válassza a hozzáadása gombot.
    • Adja meg a böngésző elérési útját a Program mezőben. A következő végrehajtható elérési utak a Windows 10 tipikus telepítési helyei. Ha a böngésző más helyen van telepítve, vagy nem Windows 10-et használ, adja meg a böngésző végrehajtható fájljának elérési útját.
      • Microsoft Edge: C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
      • Google Chrome: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
      • Mozilla Firefox: C:\Program Files\Mozilla Firefox\firefox.exe
    • Az Argumentumok mezőben adja meg azt a parancssori beállítást, amelyet a böngésző inPrivate vagy Inkognitó módban való megnyitáshoz használ. Egyes böngészőkben az alkalmazás URL-címe szükséges.
      • Microsoft Edge: A -inprivatehasználata.
      • Google Chrome: Használja a --incognito --new-window {URL}, ahol a {URL} helyőrző a megnyitni kívánt URL-cím (például https://localhost:5001).
      • Mozilla Firefox: Használja a -private -url {URL}, ahol a {URL} helyőrző a megnyitni kívánt URL-cím (például https://localhost:5001).
    • Adjon meg egy nevet a Barátságos név mezőben. Például Firefox Auth Testing.
    • Válassza az OK gombot.
    • Ha el szeretné kerülni, hogy az alkalmazással végzett tesztelés minden iterációja esetében ki kell választania a böngészőprofilt, állítsa be a profilt alapértelmezettként az Alapértelmezett gombbal.
    • Győződjön meg arról, hogy az IDE bezárja a böngészőt az alkalmazás, a tesztfelhasználó vagy a szolgáltató konfigurációjának bármilyen módosításához.

Alkalmazásfrissítések

A működő alkalmazások a .NET SDK fejlesztői gépen való frissítése vagy az alkalmazás csomagverzióinak módosítása után azonnal meghiúsulhatnak. Bizonyos esetekben az inkognitó csomagok megszakíthatják az alkalmazásokat a nagyobb frissítések végrehajtásakor. A legtöbb ilyen probléma az alábbi utasítások követésével javítható:

  1. Törölje a helyi rendszer NuGet-csomaggyorsítótárait a "dotnet nuget locals all --clear" parancs parancssorból történő végrehajtásával.
  2. Törölje a projekt bin és obj mappáit.
  3. Állítsa vissza és építse újra a projektet.
  4. Az alkalmazás ismételt üzembe helyezése előtt törölje a kiszolgáló üzembehelyezési mappájában lévő összes fájlt.

Note

Az alkalmazás cél-keretrendszerével nem kompatibilis csomagverziók használata nem támogatott. A csomaggal kapcsolatos információkért használja a NuGet-gyűjteményt.

Az Server alkalmazás futtatása

Egy üzemeltetett Blazor WebAssemblymegoldástesztelése és hibaelhárítása során győződjön meg arról, hogy az alkalmazást a Server projektből futtatja.

A felhasználó vizsgálata

A következő User összetevő közvetlenül az alkalmazásokban használható, vagy a további testreszabás alapjául szolgál.

User.razor:

@page "/user"
@attribute [Authorize]
@using System.Text.Json
@using System.Security.Claims
@inject IAccessTokenProvider AuthorizationService

<h1>@AuthenticatedUser?.Identity?.Name</h1>

<h2>Claims</h2>

@foreach (var claim in AuthenticatedUser?.Claims ?? Array.Empty<Claim>())
{
    <p class="claim">@(claim.Type): @claim.Value</p>
}

<h2>Access token</h2>

<p id="access-token">@AccessToken?.Value</p>

<h2>Access token claims</h2>

@foreach (var claim in GetAccessTokenClaims())
{
    <p>@(claim.Key): @claim.Value.ToString()</p>
}

@if (AccessToken != null)
{
    <h2>Access token expires</h2>

    <p>Current time: <span id="current-time">@DateTimeOffset.Now</span></p>
    <p id="access-token-expires">@AccessToken.Expires</p>

    <h2>Access token granted scopes (as reported by the API)</h2>

    @foreach (var scope in AccessToken.GrantedScopes)
    {
        <p>Scope: @scope</p>
    }
}

@code {
    [CascadingParameter]
    private Task<AuthenticationState> AuthenticationState { get; set; }

    public ClaimsPrincipal AuthenticatedUser { get; set; }
    public AccessToken AccessToken { get; set; }

    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
        var state = await AuthenticationState;
        var accessTokenResult = await AuthorizationService.RequestAccessToken();

        if (!accessTokenResult.TryGetToken(out var token))
        {
            throw new InvalidOperationException(
                "Failed to provision the access token.");
        }

        AccessToken = token;

        AuthenticatedUser = state.User;
    }

    protected IDictionary<string, object> GetAccessTokenClaims()
    {
        if (AccessToken == null)
        {
            return new Dictionary<string, object>();
        }

        // header.payload.signature
        var payload = AccessToken.Value.Split(".")[1];
        var base64Payload = payload.Replace('-', '+').Replace('_', '/')
            .PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');

        return JsonSerializer.Deserialize<IDictionary<string, object>>(
            Convert.FromBase64String(base64Payload));
    }
}

JSON-webjogkivonat (JWT) tartalmának vizsgálata

JSON-webjogkivonat (JWT) dekódolásához használja a Microsoft jwt.ms eszközét. A felhasználói felületen lévő értékek soha nem hagyják el a böngészőt.

Példa kódolt JWT -ra (a megjelenítéshez rövidítve):

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q

Az eszköz által dekódolt JWT-példa egy Azure AAD B2C-vel hitelesítő alkalmazáshoz:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "exp": 1610059429,
  "nbf": 1610055829,
  "ver": "1.0",
  "iss": "https://mysiteb2c.b2clogin.com/11112222-bbbb-3333-cccc-4444dddd5555/v2.0/",
  "sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
  "aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "nonce": "bbbb0000-cccc-1111-dddd-2222eeee3333",
  "iat": 1610055829,
  "auth_time": 1610055822,
  "idp": "idp.com",
  "tfp": "B2C_1_signupsignin"
}.[Signature]

További erőforrások