Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu .NET 9.
W tym artykule wyjaśniono, jak zabezpieczyć autonomiczną aplikację platformy ASP.NET Core Blazor WebAssembly przy użyciu biblioteki Blazor WebAssembly uwierzytelniania.
Biblioteka Blazor WebAssembly uwierzytelniania (Authentication.js
) obsługuje tylko przepływ kodu autoryzacji PKCE (Proof Key for Code Exchange) za pośrednictwem biblioteki Microsoft Authentication Library (MSAL, msal.js
). Aby zaimplementować inne przepływy przyznawania, skorzystaj z wytycznych MSAL, aby bezpośrednio zaimplementować MSAL. Nie obsługujemy ani nie zalecamy używania innych przepływów przyznawania niż PKCE dla aplikacji Blazor.
Jeśli szukasz wskazówek dotyczących usługi Microsoft Entra (ME-ID) i Azure Active Directory B2C (AAD B2C), nie stosuj się do wskazówek zawartych w tym temacie. Zobacz Zabezpieczanie autonomicznej aplikacji ASP.NET Core Blazor WebAssembly przy użyciu identyfikatora Entra firmy Microsoft lub Zabezpieczanie autonomicznej aplikacji ASP.NET Core Blazor WebAssembly za pomocą usługi Azure Active Directory B2C.
Aby po przeczytaniu tego artykułu uzyskać dodatkowe pokrycie scenariuszy zabezpieczeń, zobacz ASP.NET Core Blazor WebAssembly dodatkowe scenariusze zabezpieczeń.
Przewodnik
Podsekcje przewodnika wyjaśniają, jak:
- Rejestracja aplikacji
- Blazor Utwórz aplikację
- Uruchom aplikację
Rejestracja aplikacji
Zarejestruj aplikację za pomocą dostawcy OpenID Connect (OIDC)Identity zgodnie ze wskazówkami dostarczonymi przez konserwatora adresu IP.
Zarejestruj następujące informacje:
- Urząd (na przykład
https://accounts.google.com/
). - Identyfikator aplikacji (klienta) (na przykład
2...7-e...q.apps.googleusercontent.com
). - Dodatkowa konfiguracja adresu IP (zobacz dokumentację adresu IP).
Uwaga
Adres IP musi używać OIDC. Na przykład adres IP serwisu Facebook nie jest dostawcą zgodnym ze standardem OIDC, więc wskazówki zawarte w tym temacie nie działają z adresem IP serwisu Facebook. Aby uzyskać więcej informacji, zobacz Secure ASP.NET Core Blazor WebAssembly.
Blazor Utwórz aplikację
Aby utworzyć autonomiczną Blazor WebAssembly aplikację korzystającą z Microsoft.AspNetCore.Components.WebAssembly.Authentication
biblioteki, postępuj zgodnie ze wskazówkami dotyczącymi wyboru narzędzi. Jeśli dodajesz obsługę uwierzytelniania, zobacz część Części aplikacji w tym artykule, aby uzyskać wskazówki dotyczące instalacji i konfiguracji aplikacji.
Aby utworzyć nowy Blazor WebAssembly projekt z mechanizmem uwierzytelniania:
Po wybraniu szablonu Blazor WebAssembly Aplikacja, ustaw typ uwierzytelniania na Indywidualne konta.
Po wybraniu szablonu Blazor WebAssembly Aplikacja, ustaw typ uwierzytelniania na Indywidualne konta. Upewnij się, że pole wyboru ASP.NET Core Hosted nie jest zaznaczone.
Wybór Indywidualne konta używa systemu ASP.NET Core Identity . Ten wybór dodaje obsługę uwierzytelniania i nie powoduje przechowywania użytkowników w bazie danych. Poniższe sekcje tego artykułu zawierają więcej szczegółów.
Konfigurowanie aplikacji
Skonfiguruj aplikację zgodnie ze wskazówkami dotyczącymi adresu IP. Aplikacja wymaga co najmniej ustawień konfiguracji Local:Authority
oraz Local:ClientId
w pliku aplikacji wwwroot/appsettings.json
.
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Przykład OIDC protokołu Google OAuth 2.0 dla aplikacji działającej na adresie localhost
na porcie 5001:
{
"Local": {
"Authority": "https://accounts.google.com/",
"ClientId": "2...7-e...q.apps.googleusercontent.com",
"PostLogoutRedirectUri": "https://localhost:5001/authentication/logout-callback",
"RedirectUri": "https://localhost:5001/authentication/login-callback",
"ResponseType": "code"
}
}
Identyfikator URI przekierowania (
Uwaga
Podanie numeru portu dla adresu URI przekierowania nie jest wymagane dla niektórych adresów IP OIDC zgodnie ze specyfikacją OAuth 2.0. Niektóre adresy IP pozwalają, aby identyfikator URI przekierowania dla adresów sprzężenia zwrotnego pominął port. Inne zezwalają na użycie symbolu wieloznakowego dla numeru portu (na przykład *
). Aby uzyskać dodatkowe informacje, zobacz dokumentację adresu IP.
Uruchom aplikację
Aby uruchomić aplikację, użyj jednej z następujących metod:
- Visual Studio
- Wybierz przycisk Run (Uruchom).
- Użyj polecenia Debuguj>Rozpocznij debugowanie z menu.
- Naciśnij klawisz F5.
- Powłoka wiersza poleceń .NET CLI: uruchom polecenie
dotnet watch
(lubdotnet run
) z folderu aplikacji.
Części aplikacji
W tej sekcji opisano części aplikacji wygenerowane na Blazor WebAssembly podstawie szablonu projektu i sposób konfigurowania aplikacji. Nie ma konkretnych wskazówek, które należy wykonać w tej sekcji dla podstawowej aplikacji roboczej, jeśli aplikacja została utworzona przy użyciu wskazówek w sekcji Przewodnik . Wskazówki zawarte w tej sekcji są przydatne podczas aktualizowania aplikacji w celu uwierzytelniania i autoryzowania użytkowników. Jednak alternatywnym podejściem do aktualizowania aplikacji jest utworzenie nowej aplikacji na podstawie wskazówek w sekcji Przewodnik i przeniesienie składników, klas i zasobów aplikacji do nowej aplikacji.
Pakiet uwierzytelniania
Gdy aplikacja jest tworzona do korzystania z indywidualnych kont użytkowników, aplikacja automatycznie otrzymuje odwołanie do pakietu Microsoft.AspNetCore.Components.WebAssembly.Authentication
. Pakiet zawiera zestaw elementów pierwotnych, które ułatwiają aplikacji uwierzytelnianie użytkowników i uzyskiwanie tokenów w celu wywoływania chronionych interfejsów API.
W przypadku dodawania uwierzytelniania do aplikacji ręcznie dodaj Microsoft.AspNetCore.Components.WebAssembly.Authentication
pakiet do aplikacji.
Uwaga
Aby uzyskać instrukcje dodawania pakietów do aplikacji .NET, zobacz artykuły w sekcji Instalowanie pakietów i zarządzanie nimi w temacie Przepływ pracy użycia pakietów (dokumentacja programu NuGet). Sprawdź prawidłowe wersje pakietów pod adresem NuGet.org.
Obsługa usługi uwierzytelniania
Obsługa uwierzytelniania użytkowników za pomocą OpenID Connect (OIDC) jest rejestrowana w kontenerze usług przy użyciu metody rozszerzenia AddOidcAuthentication, która jest dostarczana przez pakiet Microsoft.AspNetCore.Components.WebAssembly.Authentication
.
Metoda AddOidcAuthentication akceptuje wywołanie zwrotne w celu skonfigurowania parametrów wymaganych do uwierzytelniania aplikacji przy użyciu funkcji OIDC. Wartości wymagane do skonfigurowania aplikacji można uzyskać z adresu IP zgodnego ze standardem OIDC. Uzyskaj wartości podczas rejestrowania aplikacji, co zwykle odbywa się w portalu online.
W przypadku nowej aplikacji podaj wartości dla elementów zastępczych {AUTHORITY}
i {CLIENT ID}
w poniższej konfiguracji. Podaj inne wartości konfiguracji wymagane do użycia z adresem IP aplikacji. Przykładem jest google, który wymaga PostLogoutRedirectUri
, RedirectUri
i ResponseType
. W przypadku dodawania uwierzytelniania do aplikacji, ręcznie dodaj następujący kod i konfigurację do aplikacji, podając odpowiednie wartości dla symboli zastępczych i innych wartości konfiguracji.
W pliku Program
:
builder.Services.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("Local", options.ProviderOptions);
});
wwwroot/appsettings.json
konfiguracja
Konfiguracja jest dostarczana przez plik wwwroot/appsettings.json
:
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Zakresy tokenu dostępu
Szablon Blazor WebAssembly automatycznie konfiguruje domyślne zakresy dla openid
i profile
.
Szablon Blazor WebAssembly nie konfiguruje automatycznie aplikacji pod kątem żądania tokenu dostępu dla bezpiecznego interfejsu API. Aby przydzielić token dostępu podczas logowania, dodaj zakres do domyślnych zakresów dla tokenu OidcProviderOptions. W przypadku dodawania uwierzytelniania do aplikacji ręcznie dodaj następujący kod i skonfiguruj URI zakresu.
W pliku Program
:
builder.Services.AddOidcAuthentication(options =>
{
...
options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");
});
Aby uzyskać więcej informacji, zobacz następujące sekcje artykułu Dodatkowe scenariusze :
Importuje plik
Przestrzeń nazw Microsoft.AspNetCore.Components.Authorization jest udostępniana w całej aplikacji za pośrednictwem pliku _Imports.razor
.
...
@using Microsoft.AspNetCore.Components.Authorization
...
Strona indeksu
Strona Indeks (wwwroot/index.html
) zawiera skrypt, który definiuje element AuthenticationService
w języku JavaScript.
AuthenticationService
obsługuje szczegóły niskiego poziomu protokołu OIDC. Aplikacja wewnętrznie wywołuje metody zdefiniowane w skry skryptie w celu wykonania operacji uwierzytelniania.
<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script>
Składnik aplikacji
Składnik App
(App.razor
) jest podobny do składnika App
znajdującego się w aplikacjach Blazor Server.
- Składnik AuthorizeRouteView zapewnia, że bieżący użytkownik ma autoryzację dostępu do danej strony lub w inny sposób renderuje
RedirectToLogin
składnik. - Składnik
RedirectToLogin
zarządza przekierowywaniem nieautoryzowanych użytkowników do strony logowania.
- Składnik CascadingAuthenticationState odpowiada za prezentację AuthenticationState do reszty aplikacji.
- Składnik AuthorizeRouteView zapewnia, że bieżący użytkownik ma autoryzację dostępu do danej strony lub w inny sposób renderuje
RedirectToLogin
składnik. - Składnik
RedirectToLogin
zarządza przekierowywaniem nieautoryzowanych użytkowników do strony logowania.
Ze względu na zmiany w obrębie frameworka w różnych wersjach ASP.NET Core, znaczniki dla komponentu Razor (App
) nie są wyświetlane w tej sekcji. Aby sprawdzić znaczniki składnika dla danej wersji, użyj jednej z następujących metod:
Utwórz aplikację aprowizowaną do uwierzytelniania na podstawie domyślnego Blazor WebAssembly szablonu projektu dla wersji ASP.NET Core, która ma być używana.
App
Sprawdź składnik (App.razor
) w wygenerowanej aplikacji.App
Sprawdź składnik (App.razor
) w źródle referencyjnym. Wybierz wersję z selektora gałęzi i wyszukaj komponent w folderzeProjectTemplates
repozytorium, ponieważ z biegiem lat został przeniesiony.Uwaga
Linki dokumentacji do źródła referencyjnego platformy .NET zwykle ładują domyślną gałąź repozytorium, która odzwierciedla bieżące programowanie dla następnej wersji platformy .NET. Aby wybrać tag dla określonej wersji, użyj listy rozwijanej Przełącz gałęzie lub tagi. Aby uzyskać więcej informacji, zobacz Jak wybrać tag wersji kodu źródłowego platformy ASP.NET Core (dotnet/AspNetCore.Docs #26205).
RedirectToLogin komponent
Składnik RedirectToLogin
(RedirectToLogin.razor
):
- Zarządza przekierowywaniem nieautoryzowanych użytkowników do strony logowania.
- Aktualny adres URL, do którego próbuje uzyskać dostęp użytkownik, jest utrzymywany przez system, dzięki czemu użytkownik może zostać zwrócony do tej strony, jeśli uwierzytelnianie zakończy się pomyślnie, używając:
- Stan historii nawigacji w programie ASP.NET Core na platformie .NET 7 lub nowszym.
- Ciąg zapytania w programie ASP.NET Core na platformie .NET 6 lub starszej wersji.
RedirectToLogin
Sprawdź składnik w źródle referencyjnym. Lokalizacja składnika zmieniła się wraz z upływem czasu, dlatego użyj narzędzi wyszukiwania GitHub, aby zlokalizować składnik.
Uwaga
Linki dokumentacji do źródła referencyjnego platformy .NET zwykle ładują domyślną gałąź repozytorium, która odzwierciedla bieżące programowanie dla następnej wersji platformy .NET. Aby wybrać tag dla określonej wersji, użyj listy rozwijanej Przełącz gałęzie lub tagi. Aby uzyskać więcej informacji, zobacz Jak wybrać tag wersji kodu źródłowego platformy ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Składnik LoginDisplay
Składnik LoginDisplay
(LoginDisplay.razor
) jest renderowany w składniku MainLayout
(MainLayout.razor
) i zarządza następującymi zachowaniami:
- W przypadku uwierzytelnionych użytkowników:
- Wyświetla bieżącą nazwę użytkownika.
- Oferuje link do strony profilu użytkownika w programie ASP.NET Core Identity.
- Oferuje przycisk do wylogowania się z aplikacji.
- W przypadku użytkowników anonimowych:
- Oferuje opcję rejestracji.
- Oferuje opcję logowania.
Ze względu na zmiany w platformie w wersjach ASP.NET Core, znaczniki dla Razor składnika nie są pokazywane w tej sekcji. Aby sprawdzić znaczniki składnika dla danej wersji, użyj jednej z następujących metod:
Utwórz aplikację aprowizowaną do uwierzytelniania na podstawie domyślnego Blazor WebAssembly szablonu projektu dla wersji ASP.NET Core, która ma być używana. Sprawdź komponent
LoginDisplay
w wygenerowanej aplikacji.LoginDisplay
Sprawdź składnik w źródle referencyjnym. Lokalizacja składnika zmieniła się wraz z upływem czasu, dlatego użyj narzędzi wyszukiwania GitHub, aby zlokalizować składnik. Użyto szablonowej zawartości dlaHosted
równejtrue
.Uwaga
Linki dokumentacji do źródła referencyjnego platformy .NET zwykle ładują domyślną gałąź repozytorium, która odzwierciedla bieżące programowanie dla następnej wersji platformy .NET. Aby wybrać tag dla określonej wersji, użyj listy rozwijanej Przełącz gałęzie lub tagi. Aby uzyskać więcej informacji, zobacz Jak wybrać tag wersji kodu źródłowego platformy ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Składnik uwierzytelniania
Strona utworzona przez składnik Authentication
(Pages/Authentication.razor
) definiuje trasy wymagane do obsługi różnych etapów uwierzytelniania.
Składnik RemoteAuthenticatorView :
- Jest dostarczany przez
Microsoft.AspNetCore.Components.WebAssembly.Authentication
pakiet. - Zarządza wykonywaniem odpowiednich akcji na każdym etapie uwierzytelniania.
@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
<RemoteAuthenticatorView Action="@Action" />
@code {
[Parameter]
public string? Action { get; set; }
}
Uwaga
Typy referencyjne dopuszczające wartości null (NRT) i analizy statyczne stanu null kompilatora .NET są obsługiwane w ASP.NET Core na .NET 6 lub nowszym. Przed wydaniem ASP.NET Core w .NET 6 typ string
występuje bez oznaczenia typu null (?
).
Rozwiązywanie problemów
Rejestrowanie
Aby włączyć rejestrowanie debugowania lub śledzenia dla Blazor WebAssembly uwierzytelniania, zobacz sekcję Rejestrowanie uwierzytelniania po stronie klienta w ASP.NET Core Blazor logging, 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 autorytet, instancja, identyfikator tenanta, domena tenanta, identyfikator klienta lub identyfikator URI przekierowania uniemożliwia aplikacji na 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.
- Uruchomienie aplikacji na porcie innym niż ten skonfigurowany w przekierowaniu URI w rejestracji aplikacji IP. Należy pamiętać, że dla Microsoft Entra ID i aplikacji działającej
localhost
na adresie testowania w fazie rozwoju nie jest wymagany port, ale konfiguracja portu aplikacji i port, na którym działa aplikacja, musi być zgodna z adresami innymi niżlocalhost
.
Sekcje konfiguracji tego artykułu zawierają przykłady prawidłowej konfiguracji. Dokładnie sprawdź każdą sekcję artykułu, aby wyszukać 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. Wskazówki dotyczące narzędzi programistycznych można znaleźć w następujących artykułach.
- Google Chrome (dokumentacja Google)
- Microsoft Edge
- Mozilla Firefox (dokumentacja Mozilla)
W przypadku wersji Blazor , w których jest używany token internetowy JSON (JWT), zdekoduj zawartość tokenu używanego do uwierzytelniania klienta lub uzyskiwania dostępu do internetowego interfejsu API serwera, w zależności od tego, gdzie występuje problem. Aby uzyskać więcej informacji, zobacz Inspekcja zawartości tokenu internetowego JSON (JWT).
Zespół dokumentacji odpowiada na opinie dotyczące dokumentów oraz błędy w artykułach (otwórz problem z sekcji opinii na stronie Ta strona), ale nie może zapewnić wsparcia technicznego dotyczącego 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 o usterkach struktur niezwiązanych z zabezpieczeniami, nietajne i niewrażliwe, zgłoś problem do zespołu 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 ME-ID
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 ze sposobów zapobiegania wpływowi utrzymujących się plików cookie i danych witryny na testowanie i rozwiązywanie problemów jest:
- Konfigurowanie przeglądarki
- Użyj przeglądarki do testowania, której można skonfigurować, aby usuwała wszystkie dane cache i witryny za każdym razem, gdy jest zamykana.
- 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 przy użyciu 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
-inprivate
. - Google Chrome: użyj
--incognito --new-window {URL}
, gdzie{URL}
to adres URL do otwarcia (na przykładhttps://localhost:5001
). - Mozilla Firefox: użyj
-private -url {URL}
, gdzie{URL}
jest adresem URL do otwarcia (na przykładhttps://localhost:5001
).
- Microsoft Edge: użyj
- 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 wiersza poleceń. - Usuń foldery projektu
bin
iobj
. - Odtworzenie i odbudowa 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 o pakiecie, użyj Galerii NuGet .
Server
Uruchamianie aplikacji
Podczas testowania i rozwiązywania problemów z hostowanym Blazor WebAssemblyrozwiązaniem upewnij się, że używasz aplikacji z Server
projektu.
Sprawdzanie użytkownika
Poniższy User
składnik może być używany bezpośrednio w aplikacjach lub służyć jako podstawa dalszego dostosowywania.
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));
}
}
Sprawdzanie zawartości tokenu internetowego JSON (JWT)
Aby zdekodować token internetowy JSON (JWT), użyj narzędzia jwt.ms firmy Microsoft. Wartości w interfejsie użytkownika nigdy nie opuszczają przeglądarki.
Przykład zakodowany JWT (skrócony do wyświetlania):
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q
Przykładowy kod JWT dekodowany przez narzędzie dla aplikacji, która uwierzytelnia się w usłudze Azure AAD B2C:
{
"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]
Dodatkowe zasoby
- Dodatkowe scenariusze zabezpieczeń dotyczące platformy ASP.NET Core Blazor WebAssembly
- Nieuwierzytelnione lub nieautoryzowane żądania internetowego interfejsu API w aplikacji z bezpiecznym klientem domyślnym
-
Konfigurowanie ASP.NET Core do pracy z serwerami proxy i modułami równoważenia obciążenia: zawiera wskazówki dotyczące:
- Używanie oprogramowania pośredniczącego do przekazywania nagłówków w celu zachowania informacji o schemacie HTTPS między serwerami proxy a sieciami wewnętrznymi.
- Dodatkowe scenariusze i przypadki użycia, w tym ręczna konfiguracja schematu, zmiany ścieżki żądania dla prawidłowego routingu żądań oraz przekazywanie schematu żądania dla zwrotnych serwerów proxy w systemach Linux i innych niż IIS.