Zabezpieczanie ASP.NET Core Blazor Web App za pomocą identyfikatora Entra firmy Microsoft
W tym artykule opisano sposób zabezpieczania pakietu Blazor Web App Microsoft Web platformy MicrosoftIdentity/identity dla identyfikatora Entra firmy Microsoft przy użyciu przykładowej aplikacji.
Opisano następującą specyfikację:
- Funkcja Blazor Web App używa trybu automatycznego renderowania z globalną interakcyjnością (
InteractiveAuto
). - Projekt serwera wywołuje polecenie AddAuthenticationStateSerialization , aby dodać dostawcę stanu uwierzytelniania po stronie serwera, który używa PersistentComponentState do przepływu stanu uwierzytelniania do klienta. Klient wywołuje AddAuthenticationStateDeserialization metodę deserializacji i użyj stanu uwierzytelniania przekazanego przez serwer. Stan uwierzytelniania jest stały dla okresu istnienia aplikacji WebAssembly.
- Aplikacja używa identyfikatora Entra firmy Microsoft opartego na pakietach microsoft Identity Web .
- Automatyczne odświeżanie tokenów nieinterakcyjnych jest zarządzane przez platformę.
- Aplikacja używa abstrakcji usługi po stronie serwera i po stronie klienta do wyświetlania wygenerowanych danych pogodowych:
- Podczas renderowania
Weather
składnika na serwerze w celu wyświetlania danych pogodowych składnik używaServerWeatherForecaster
elementu na serwerze do bezpośredniego uzyskiwania danych pogodowych (nie za pośrednictwem wywołania internetowego interfejsu API). Weather
Gdy składnik jest renderowany na kliencie, składnik używaClientWeatherForecaster
implementacji usługi, która używa wstępnie skonfigurowanego HttpClient (w pliku projektuProgram
klienta) wywołania internetowego interfejsu API do minimalnego interfejsu API serwera (/weather-forecast
) dla danych pogodowych. Minimalny punkt końcowy interfejsu API uzyskuje dane pogodowe zServerWeatherForecaster
klasy i zwraca je do klienta do renderowania przez składnik.
- Podczas renderowania
Przykładowa aplikacja
Przykładowa aplikacja składa się z dwóch projektów:
BlazorWebAppEntra
: Projekt po stronie serwera obiektu , zawierający przykładowy punkt końcowy interfejsu Blazor Web AppAPI Minimalny dla danych pogodowych.BlazorWebAppEntra.Client
: projekt po stronie klienta obiektu Blazor Web App.
Uzyskaj dostęp do przykładowych aplikacji za pośrednictwem folderu najnowszej wersji z katalogu głównego repozytorium przy użyciu następującego linku. Projekty znajdują się w folderze BlazorWebAppEntra
.NET 9 lub nowszym.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Projekt po stronie Blazor Web App serwera (BlazorWebAppEntra
)
Projekt BlazorWebAppEntra
jest projektem po stronie serwera programu Blazor Web App.
Plik BlazorWebAppEntra.http
może służyć do testowania żądania danych pogodowych. Należy pamiętać, że BlazorWebAppEntra
projekt musi być uruchomiony, aby przetestować punkt końcowy, a punkt końcowy jest zakodowany w pliku. Aby uzyskać więcej informacji, zobacz Use .http files in Visual Studio 2022 (Używanie plików HTTP w programie Visual Studio 2022).
Projekt po stronie Blazor Web App klienta (BlazorWebAppEntra.Client
)
Projekt BlazorWebAppEntra.Client
jest projektem po stronie klienta programu Blazor Web App.
Jeśli użytkownik musi się zalogować lub wylogować podczas renderowania po stronie klienta, zostanie zainicjowane ponowne załadowanie pełnej strony.
Konfigurowanie
W tej sekcji wyjaśniono, jak skonfigurować przykładową aplikację.
AddMicrosoftIdentityWebApp w witrynie Microsoft Identity Web (Microsoft.Identity.Web
pakiet NuGet, dokumentacja interfejsu API) jest konfigurowana przez sekcję AzureAd
pliku projektu appsettings.json
serwera.
W rejestracji aplikacji w witrynie Entra lub Azure Portal użyj konfiguracji platformy internetowej z identyfikatorem URI https://localhost/signin-oidc
przekierowania (port nie jest wymagany). Upewnij się, że nie wybrano tokenów identyfikatorów i tokenów dostępu w obszarze Niejawne udzielanie i przepływy hybrydowe. Procedura obsługi OpenID Connect automatycznie żąda odpowiednich tokenów przy użyciu kodu zwróconego z punktu końcowego autoryzacji.
Konfigurowanie aplikacji
W pliku ustawień aplikacji projektu serwera (appsettings.json
) podaj konfigurację sekcji aplikacji AzureAd
. Uzyskaj identyfikator aplikacji (klienta), domenę dzierżawy (wydawcę) i identyfikator katalogu (dzierżawy) z rejestracji aplikacji w witrynie Entra lub Azure Portal:
"AzureAd": {
"CallbackPath": "/signin-oidc",
"ClientId": "{CLIENT ID}",
"Domain": "{DOMAIN}",
"Instance": "https://login.microsoftonline.com/",
"ResponseType": "code",
"TenantId": "{TENANT ID}"
},
Symbole zastępcze w poprzednim przykładzie:
{CLIENT ID}
: identyfikator aplikacji (klienta).{DOMAIN}
: domena dzierżawy (wydawcy).{TENANT ID}
: identyfikator katalogu (dzierżawy).
Przykład:
"AzureAd": {
"CallbackPath": "/signin-oidc",
"ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"Domain": "contoso.onmicrosoft.com",
"Instance": "https://login.microsoftonline.com/",
"ResponseType": "code",
"TenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
},
Ścieżka wywołania zwrotnego (CallbackPath
) musi być zgodna z identyfikatorem URI przekierowania (ścieżką wywołania zwrotnego logowania) skonfigurowanym podczas rejestrowania aplikacji w witrynie Entra lub w witrynie Azure Portal. Ścieżki są konfigurowane w bloku Uwierzytelnianie rejestracji aplikacji. Wartość CallbackPath
domyślna to /signin-oidc
dla zarejestrowanego identyfikatora URI https://localhost/signin-oidc
przekierowania (port nie jest wymagany).
Ostrzeżenie
Nie przechowuj wpisów tajnych aplikacji, parametry połączenia, poświadczeń, haseł, osobistych numerów identyfikacyjnych (PIN), prywatnego kodu C#/.NET lub kluczy prywatnych/tokenów w kodzie po stronie klienta, który jest zawsze niepewny. W środowiskach testowych/przejściowych i produkcyjnych kod po stronie Blazor serwera i internetowe interfejsy API powinny używać bezpiecznych przepływów uwierzytelniania, które unikają utrzymywania poświadczeń w kodzie projektu lub plikach konfiguracji. Poza lokalnymi testami programistycznymi zalecamy unikanie używania zmiennych środowiskowych do przechowywania poufnych danych, ponieważ zmienne środowiskowe nie są najbezpieczniejszym podejściem. W przypadku lokalnego testowania programistycznego narzędzie Secret Manager jest zalecane do zabezpieczania poufnych danych. Aby uzyskać więcej informacji, zobacz Bezpieczne utrzymywanie poufnych danych i poświadczeń.
Ustanawianie wpisu tajnego klienta
Utwórz wpis tajny klienta w rejestracji identyfikatora entra aplikacji w witrynie Entra lub Witrynie Azure Portal (Zarządzaj>certyfikatami i wpisami tajnymi>Nowy klucz tajny klienta). Użyj wartości nowego wpisu tajnego w poniższych wskazówkach.
Użyj jednej lub obu następujących metod, aby podać klucz tajny klienta do aplikacji:
- Narzędzie Secret Manager: narzędzie Secret Manager przechowuje prywatne dane na komputerze lokalnym i jest używane tylko podczas programowania lokalnego.
- Azure Key Vault: klucz tajny klienta można przechowywać w magazynie kluczy do użycia w dowolnym środowisku, w tym dla środowiska deweloperskiego podczas pracy lokalnie. Niektórzy deweloperzy wolą używać magazynów kluczy do wdrażania przejściowego i produkcyjnego oraz używać narzędzia Secret Manager do programowania lokalnego.
Zdecydowanie zalecamy unikanie przechowywania wpisów tajnych klienta w kodzie projektu lub plikach konfiguracji. Użyj bezpiecznych przepływów uwierzytelniania, takich jak metody lub obie metody w tej sekcji.
Narzędzie Secret Manager
Narzędzie Secret Manager może przechowywać klucz tajny klienta aplikacji serwera w kluczu AzureAd:ClientSecret
konfiguracji .
Przykładowa aplikacja nie została zainicjowana dla narzędzia Secret Manager. Użyj powłoki poleceń, takiej jak powłoka poleceń programu PowerShell dla deweloperów w programie Visual Studio, aby wykonać następujące polecenie. Przed wykonaniem polecenia zmień katalog za cd
pomocą polecenia na katalog projektu serwera. Polecenie ustanawia identyfikator wpisów tajnych użytkownika (<UserSecretsId>
) w pliku projektu aplikacji serwera, który jest używany wewnętrznie przez narzędzie do śledzenia wpisów tajnych dla aplikacji:
dotnet user-secrets init
Wykonaj następujące polecenie, aby ustawić klucz tajny klienta. Symbol {SECRET}
zastępczy to klucz tajny klienta uzyskany z rejestracji entra aplikacji:
dotnet user-secrets set "AzureAd:ClientSecret" "{SECRET}"
Jeśli używasz programu Visual Studio, możesz potwierdzić, że wpis tajny został ustawiony, klikając prawym przyciskiem myszy projekt serwera w Eksplorator rozwiązań i wybierając polecenie Zarządzaj wpisami tajnymi użytkownika.
Azure Key Vault
Usługa Azure Key Vault zapewnia bezpieczne podejście do udostępniania wpisu tajnego klienta aplikacji do aplikacji.
Aby utworzyć magazyn kluczy i ustawić klucz tajny klienta, zobacz Informacje o wpisach tajnych usługi Azure Key Vault (dokumentacja platformy Azure), które umożliwiają rozpoczęcie pracy z usługą Azure Key Vault. Aby zaimplementować kod w tej sekcji, zapisz identyfikator URI magazynu kluczy i nazwę wpisu tajnego z platformy Azure podczas tworzenia magazynu kluczy i wpisu tajnego. Po ustawieniu zasad dostępu dla wpisu tajnego w panelu Zasady dostępu:
- Wymagane jest tylko uprawnienie Uzyskiwanie wpisu tajnego.
- Wybierz aplikację jako podmiot zabezpieczeń dla wpisu tajnego.
Ważne
Wpis tajny magazynu kluczy jest tworzony z datą wygaśnięcia. Pamiętaj, aby śledzić, kiedy wpis tajny magazynu kluczy wygaśnie, i utwórz nowy wpis tajny dla aplikacji przed upływem tej daty.
Poniższa GetKeyVaultSecret
metoda pobiera wpis tajny z magazynu kluczy. Dodaj tę metodę do projektu serwera. Dostosuj przestrzeń nazw (BlazorSample.Helpers
), aby pasować do schematu przestrzeni nazw projektu.
Helpers/AzureHelper.cs
:
using Azure;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
namespace BlazorSample.Helpers;
public static class AzureHelper
{
public static string GetKeyVaultSecret(string tenantId, string vaultUri, string secretName)
{
DefaultAzureCredentialOptions options = new()
{
// Specify the tenant ID to use the dev credentials when running the app locally
// in Visual Studio.
VisualStudioTenantId = tenantId,
SharedTokenCacheTenantId = tenantId
};
var client = new SecretClient(new Uri(vaultUri), new DefaultAzureCredential(options));
var secret = client.GetSecretAsync(secretName).Result;
return secret.Value.Value;
}
}
Gdzie usługi są zarejestrowane w pliku projektu Program
serwera, uzyskaj i zastosuj klucz tajny klienta przy użyciu następującego kodu:
var tenantId = builder.Configuration.GetValue<string>("AzureAd:TenantId")!;
var vaultUri = builder.Configuration.GetValue<string>("AzureAd:VaultUri")!;
var secretName = builder.Configuration.GetValue<string>("AzureAd:SecretName")!;
builder.Services.Configure<MicrosoftIdentityOptions>(
OpenIdConnectDefaults.AuthenticationScheme,
options =>
{
options.ClientSecret =
AzureHelper.GetKeyVaultSecret(tenantId, vaultUri, secretName);
});
Jeśli chcesz kontrolować środowisko, w którym działa powyższy kod, na przykład aby uniknąć lokalnego uruchamiania kodu, ponieważ wybrano opcję używania narzędzia Secret Manager do programowania lokalnego, możesz opakowować powyższy kod w instrukcji warunkowej sprawdzającej środowisko:
if (!context.HostingEnvironment.IsDevelopment())
{
...
}
AzureAd
W sekcji w appsettings.json
pliku dodaj następujące VaultUri
SecretName
klucze i wartości konfiguracji:
"VaultUri": "{VAULT URI}",
"SecretName": "{SECRET NAME}"
W powyższym przykładzie:
- Symbol
{VAULT URI}
zastępczy to identyfikator URI magazynu kluczy. Dołącz ukośnik końcowy do identyfikatora URI. - Symbol
{SECRET NAME}
zastępczy to nazwa wpisu tajnego.
Przykład:
"VaultUri": "https://contoso.vault.azure.net/",
"SecretName": "BlazorWebAppEntra"
Konfiguracja umożliwia dostarczanie dedykowanych magazynów kluczy i nazw wpisów tajnych na podstawie plików konfiguracji środowiska aplikacji. Na przykład można podać różne wartości konfiguracji dla appsettings.Development.json
programu w środowisku deweloperskim, appsettings.Staging.json
podczas przemieszczania i appsettings.Production.json
wdrożenia produkcyjnego. Aby uzyskać więcej informacji, zobacz ASP.NET Core configuration (Konfiguracja ASP.NET CoreBlazor).
Przekieruj home do strony po wylogowaniu
Gdy użytkownik przechodzi po aplikacji, LogInOrOut
składnik (Layout/LogInOrOut.razor
) ustawia ukryte pole dla zwracanego adresu URL (ReturnUrl
) na wartość bieżącego adresu URL (currentURL
). Gdy użytkownik wyloguje się z aplikacji, dostawca zwraca je do strony, identity z której się wylogował.
Jeśli użytkownik wyloguje się z bezpiecznej strony, zostanie zwrócony z powrotem do tej samej bezpiecznej strony po wylogowaniu się tylko do wysłania z powrotem za pośrednictwem procesu uwierzytelniania. To zachowanie jest w porządku, gdy użytkownicy muszą często przełączać konta. Jednak alternatywna specyfikacja aplikacji może wywołać powrót użytkownika do strony aplikacji home lub innej strony po wylogowaniu. W poniższym przykładzie pokazano, jak ustawić stronę aplikacji home jako zwrotny adres URL operacji wylogowywania.
Ważne zmiany w składniku LogInOrOut
przedstawiono w poniższym przykładzie. Nie ma potrzeby podawania ukrytego pola dla ReturnUrl
zestawu na home stronie, /
ponieważ jest to ścieżka domyślna. IDisposable program nie jest już implementowany. Lek NavigationManager nie jest już wstrzykiwany. Cały @code
blok zostanie usunięty.
Layout/LogInOrOut.razor
:
@using Microsoft.AspNetCore.Authorization
<div class="nav-item px-3">
<AuthorizeView>
<Authorized>
<form action="authentication/logout" method="post">
<AntiforgeryToken />
<button type="submit" class="nav-link">
<span class="bi bi-arrow-bar-left-nav-menu" aria-hidden="true">
</span> Logout @context.User.Identity?.Name
</button>
</form>
</Authorized>
<NotAuthorized>
<a class="nav-link" href="authentication/login">
<span class="bi bi-person-badge-nav-menu" aria-hidden="true"></span>
Login
</a>
</NotAuthorized>
</AuthorizeView>
</div>
Rozwiązywanie problemów
Rejestrowanie
Aplikacja serwera jest standardową aplikacją ASP.NET Core. Zobacz wskazówki dotyczące rejestrowania ASP.NET Core, aby włączyć niższy poziom rejestrowania w aplikacji serwera.
Aby włączyć rejestrowanie debugowania lub śledzenia na potrzeby Blazor WebAssembly uwierzytelniania, zobacz sekcję Rejestrowanie uwierzytelniania po stronie klienta ASP.NET Core Blazor z selektorem wersji artykułu ustawionym na ASP.NET Core 7.0 lub nowszym.
Typowe błędy
Błędna konfiguracja aplikacji lub Identity dostawcy (IP)
Najczęstsze błędy są spowodowane nieprawidłową konfiguracją. Poniżej przedstawiono kilka przykładów:
- W zależności od wymagań scenariusza brakujący lub niepoprawny urząd, wystąpienie, identyfikator dzierżawy, domena dzierżawy, identyfikator klienta lub identyfikator URI przekierowania uniemożliwia aplikacji uwierzytelnianie klientów.
- Nieprawidłowe zakresy żądań uniemożliwiają klientom uzyskiwanie dostępu do punktów końcowych internetowego interfejsu API serwera.
- Nieprawidłowe lub brakujące uprawnienia interfejsu API serwera uniemożliwiają klientom uzyskiwanie dostępu do punktów końcowych internetowego interfejsu API serwera.
- Uruchamianie aplikacji na innym porcie niż jest skonfigurowane w identyfikatorze URI przekierowania rejestracji aplikacji adresu IP. Należy pamiętać, że port nie jest wymagany dla identyfikatora Entra firmy Microsoft i aplikacji działającej
localhost
na adresie testowania programowania, ale konfiguracja portu aplikacji i port, na którym działa aplikacja, musi być zgodna z adresami innychlocalhost
niż.
Pokrycie konfiguracji w tym artykule przedstawia przykłady prawidłowej konfiguracji. Dokładnie sprawdź konfigurację wyszukując błędną konfigurację aplikacji i adresu IP.
Jeśli konfiguracja jest poprawna:
Analizowanie dzienników aplikacji.
Sprawdź ruch sieciowy między aplikacją kliencka a adresem IP lub aplikacją serwera przy użyciu narzędzi deweloperskich przeglądarki. Często dokładny komunikat o błędzie lub komunikat zawierający wskazówki dotyczące przyczyn problemu jest zwracany do klienta przez adres IP lub aplikację serwera po wykonaniu żądania. Narzędzia programistyczne wskazówki można znaleźć w następujących artykułach:
- Google Chrome (dokumentacja Google)
- Microsoft Edge
- Mozilla Firefox (dokumentacja Mozilla)
Zespół dokumentacji odpowiada na opinie dotyczące dokumentów i usterek w artykułach (otwórz problem z sekcji Ta strona opinii), ale nie może zapewnić pomocy technicznej dotyczącej produktów. Dostępnych jest kilka publicznych forów pomocy technicznej, które ułatwiają rozwiązywanie problemów z aplikacją. Zalecamy:
Poprzednie fora nie należą do firmy Microsoft ani nie są kontrolowane przez firmę Microsoft.
W przypadku raportów usterek struktury niezwiązanych z zabezpieczeniami, niewrażliwych i nieufnych, otwórz problem z jednostką produktu ASP.NET Core. Nie otwieraj problemu z jednostką produktu, dopóki nie zbadasz dokładnie przyczyny problemu i nie możesz go rozwiązać samodzielnie i z pomocą społeczności na publicznym forum pomocy technicznej. Jednostka produktu nie może rozwiązywać problemów z poszczególnymi aplikacjami, które są uszkodzone z powodu prostej błędnej konfiguracji lub przypadków użycia obejmujących usługi innych firm. Jeśli raport jest poufny lub poufny lub opisuje potencjalną lukę w zabezpieczeniach produktu, którą mogą wykorzystać cyberataki, zobacz Raportowanie problemów z zabezpieczeniami i usterek (
dotnet/aspnetcore
repozytorium GitHub).Nieautoryzowany klient dla identyfikatora ME
info: Autoryzacja Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] nie powiodła się. Te wymagania nie zostały spełnione: DenyAnonymousAuthorizationRequirement: Wymaga uwierzytelnionego użytkownika.
Błąd wywołania zwrotnego logowania z identyfikatora ME-ID:
- Błąd:
unauthorized_client
- Opis:
AADB2C90058: The provided application is not configured to allow public clients.
Aby naprawić ten błąd:
- W witrynie Azure Portal uzyskaj dostęp do manifestu aplikacji.
allowPublicClient
Ustaw atrybut nanull
lubtrue
.
- Błąd:
Pliki cookie i dane witryn
Pliki cookie i dane witryn mogą być utrwalane w aktualizacjach aplikacji i zakłócać testowanie i rozwiązywanie problemów. Wyczyść następujące informacje podczas wprowadzania zmian w kodzie aplikacji, zmiany konta użytkownika w dostawcy lub zmiany konfiguracji aplikacji dostawcy:
- Pliki cookie logowania użytkownika
- Pliki cookie aplikacji
- Buforowane i przechowywane dane lokacji
Jednym z metod zapobiegania utrzymującym się plikom cookie i danym witryny jest zakłócanie testowania i rozwiązywania problemów:
- Konfigurowanie przeglądarki
- Użyj przeglądarki do testowania, które można skonfigurować, aby usuwać wszystkie cookie dane witryny i za każdym razem, gdy przeglądarka jest zamknięta.
- Upewnij się, że przeglądarka jest zamknięta ręcznie lub przez środowisko IDE w celu zmiany konfiguracji aplikacji, użytkownika testowego lub dostawcy.
- Użyj polecenia niestandardowego, aby otworzyć przeglądarkę w trybie InPrivate lub Incognito w programie Visual Studio:
- Otwórz okno dialogowe Przeglądaj za pomocą z przycisku Uruchom programu Visual Studio.
- Kliknij przycisk Dodaj.
- Podaj ścieżkę do przeglądarki w polu Program . Następujące ścieżki wykonywalne to typowe lokalizacje instalacji systemu Windows 10. Jeśli przeglądarka jest zainstalowana w innej lokalizacji lub nie używasz systemu Windows 10, podaj ścieżkę do pliku wykonywalnego przeglądarki.
- 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
- Microsoft Edge:
- W polu Argumenty podaj opcję wiersza polecenia używaną przez przeglądarkę do otwierania w trybie InPrivate lub Incognito. Niektóre przeglądarki wymagają adresu URL aplikacji.
- Microsoft Edge: użyj polecenia
-inprivate
. - Google Chrome: użyj symbolu
--incognito --new-window {URL}
{URL}
zastępczego , gdzie symbol zastępczy to adres URL do otwarcia (na przykładhttps://localhost:5001
). - Mozilla Firefox: użyj symbolu
-private -url {URL}
zastępczego{URL}
, gdzie symbol zastępczy jest adresem URL do otwarcia (na przykładhttps://localhost:5001
).
- Microsoft Edge: użyj polecenia
- Podaj nazwę w polu Przyjazna nazwa . Na przykład
Firefox Auth Testing
. - Wybierz przycisk OK.
- Aby uniknąć konieczności wybierania profilu przeglądarki dla każdej iteracji testowania za pomocą aplikacji, ustaw profil jako domyślny przy użyciu przycisku Ustaw jako domyślny .
- Upewnij się, że przeglądarka jest zamknięta przez środowisko IDE w celu zmiany konfiguracji aplikacji, użytkownika testowego lub dostawcy.
Uaktualnienia aplikacji
Działająca aplikacja może zakończyć się niepowodzeniem natychmiast po uaktualnieniu zestawu .NET Core SDK na komputerze deweloperskim lub zmianie wersji pakietów w aplikacji. W niektórych przypadkach niespójne pakiety mogą spowodować przerwanie aplikacji podczas przeprowadzania głównych uaktualnień. Większość z tych problemów można rozwiązać, wykonując następujące instrukcje:
- Wyczyść pamięć podręczną pakietów NuGet systemu lokalnego, wykonując polecenie
dotnet nuget locals all --clear
z powłoki poleceń. - Usuń foldery i
obj
folderybin
projektu. - Przywracanie i ponowne kompilowanie projektu.
- Usuń wszystkie pliki w folderze wdrażania na serwerze przed ponownym wdrożeniem aplikacji.
Uwaga
Korzystanie z wersji pakietów niezgodnych z platformą docelową aplikacji nie jest obsługiwane. Aby uzyskać informacje na temat pakietu, użyj galerii NuGet lub Eksploratora pakietów FuGet.
Uruchamianie aplikacji serwera
Podczas testowania i rozwiązywania problemów Blazor Web Appupewnij się, że aplikacja jest uruchamiana z projektu serwera.
Sprawdzanie użytkownika
Poniższy UserClaims
składnik może być używany bezpośrednio w aplikacjach lub służyć jako podstawa dalszego dostosowywania.
UserClaims.razor
:
@page "/user-claims"
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
<PageTitle>User Claims</PageTitle>
<h1>User Claims</h1>
@if (claims.Any())
{
<ul>
@foreach (var claim in claims)
{
<li><b>@claim.Type:</b> @claim.Value</li>
}
</ul>
}
@code {
private IEnumerable<Claim> claims = Enumerable.Empty<Claim>();
[CascadingParameter]
private Task<AuthenticationState>? AuthState { get; set; }
protected override async Task OnInitializedAsync()
{
if (AuthState == null)
{
return;
}
var authState = await AuthState;
claims = authState.User.Claims;
}
}
Dodatkowe zasoby
- Dokumentacja platformy Microsoft identity
AzureAD/microsoft-identity-web
Repozytorium GitHub: przydatne wskazówki dotyczące implementowania usługi Microsoft Identity Web for Microsoft Entra ID i Azure Active Directory B2C dla aplikacji ASP.NET Core, w tym linki do przykładowych aplikacji i powiązanej dokumentacji platformy Azure. Obecnie nie są jawnie rozwiązywane przez dokumentację platformy Azure, Blazor Web Appale konfiguracja i konfiguracja Blazor Web App identyfikatora ME-ID i hostingu platformy Azure są takie same jak w przypadku dowolnej aplikacji internetowej ASP.NET Core.AuthenticationStateProvider
usługa- Zarządzanie stanem uwierzytelniania w s Blazor Web App
- Abstrakcje usług w s Blazor Web App