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.
Ważne
Szablon projektu Hostowany Blazor WebAssembly został usunięty ze struktury z wydaniem programu .NET 8 (listopad 2023 r.). Wskazówki zawarte w tym artykule są obsługiwane tylko dla platformy .NET 7 lub starszej wersji. Hostowane aplikacje Blazor WebAssembly, które są uaktualniane w każdej wersji, nadal otrzymują pomoc techniczną dotyczącą produktów. Możesz też przekształcić aplikację w autonomiczną aplikację Blazor WebAssembly lub Blazor Web App.
W tym artykule wyjaśniono, jak utworzyć hostowane Blazor WebAssembly rozwiązanie, które używa identyfikatora Entra (ME-ID) firmy Microsoft do uwierzytelniania. Ten artykuł koncentruje się na aplikacji z pojedynczym dzierżawcą z rejestracją aplikacji Azure dla pojedynczego dzierżawcy.
Ten artykuł nie obejmuje rejestracji wielonajemcowego ME-ID. Aby uzyskać więcej informacji, zobacz Tworzenie aplikacji wielodostępnej.
Ten artykuł koncentruje się na użyciu dzierżawy firmy Microsoft Entra zgodnie z opisem w przewodniku Szybki start: Konfigurowanie dzierżawy. Jeśli aplikacja jest zarejestrowana w dzierżawie usługi Azure Active Directory B2C, zgodnie z opisem w Samouczku: Tworzenie dzierżawy Azure Active Directory B2C, ale stosuje się do wskazówek zawartych w tym artykule, identyfikator URI aplikacji jest zarządzany inaczej przez ME-ID. Aby uzyskać więcej informacji, zobacz sekcję Korzystanie z dzierżawy usługi Azure Active Directory B2C w tym artykule.
Aby uzyskać dodatkowe informacje o scenariuszach zabezpieczeń po przeczytaniu tego artykułu, zobacz ASP.NET Core Blazor WebAssembly dodatkowe scenariusze zabezpieczeń.
Przewodnik
Podsekcje przewodnika wyjaśniają, jak:
- Tworzenie dzierżawy na platformie Azure
- Zarejestruj aplikację interfejsu API serwera na platformie Azure
- Rejestrowanie aplikacji klienckiej na platformie Azure
- Utwórz aplikację Blazor
- Modyfikowanie Server
appsettings.json
konfiguracji - Modyfikowanie domyślnego schematu zakresu tokenu dostępu
- Uruchom aplikację
Tworzenie dzierżawy na platformie Azure
Postępuj zgodnie ze wskazówkami w Szybki start: Konfiguracja dzierżawy, aby utworzyć dzierżawcę w ME-ID.
Rejestracja aplikacji API serwera w Azure
Zarejestruj aplikację ME-ID dla aplikacji API serwera
- Przejdź do Microsoft Entra ID w portalu Azure. Wybierz pozycję Aplikacje> Rejestracje aplikacji na pasku bocznym. Wybierz przycisk Nowa rejestracja.
- Podaj nazwę aplikacji (na przykład Blazor Server ME-ID).
- Wybierz obsługiwane typy kont. Możesz wybrać opcję Konta tylko w tym katalogu organizacyjnym (pojedynczy dzierżawca) dla tego środowiska.
- Aplikacja Server API nie wymaga URI przekierowania w tym scenariuszu, dlatego pozostaw listę rozwijaną 'Wybierz platformę' niezaznaczoną i nie wprowadzaj URI przekierowania.
- W tym artykule założono, że aplikacja jest zarejestrowana w dzierżawcy Microsoft Entra. Jeśli aplikacja jest zarejestrowana w dzierżawie usługi Azure Active Directory B2C, pole wyboru Uprawnienia>Udziel zgody administratora na uprawnienia openid i offline_access jest obecne i zaznaczone. Usuń zaznaczenie pola wyboru, aby wyłączyć ustawienie. W przypadku korzystania z dzierżawy usługi Active Azure Directory pole wyboru nie jest obecne.
- Wybierz pozycję Zarejestruj.
Zarejestruj następujące informacje:
-
Identyfikator aplikacji interfejsu API serwera (klienta) (na przykład
00001111-aaaa-2222-bbbb-3333cccc4444
) - Identyfikator katalogu (dzierżawy) (na przykład
aaaabbbb-0000-cccc-1111-dddd2222eeee
) - Domena podstawowa/wydawca/dzierżawa identyfikatora ME-ID (na przykład
contoso.onmicrosoft.com
): Domena jest dostępna jako domena Wydawcy w sekcji Branding portalu Azure dla zarejestrowanej aplikacji.
W uprawnieniach interfejsu API usuń uprawnienie Microsoft Graph>User.Read, ponieważ aplikacja API serwera nie wymaga dodatkowego dostępu do interfejsu API tylko w celu logowania użytkowników i wywoływania punktów końcowych interfejsu API serwera.
W sekcji Udostępnianie interfejsu API:
- Potwierdź lub dodaj identyfikator URI aplikacji w formacie
api://{SERVER API APP CLIENT ID}
. - Wybierz Dodaj zakres.
- Wybierz przycisk Zapisz i kontynuuj.
-
Podaj nazwę zakresu (na przykład
API.Access
). - Podaj nazwę wyświetlaną zgody administratora (na przykład,
Access API
). -
Podaj opis zgody administratora (na przykład
Allows the app to access server app API endpoints.
). - Upewnij się, że stan jest ustawiony na Włączone.
- Wybierz Dodaj zakres.
Zarejestruj następujące informacje:
- Identyfikator GUID URI aplikacji (na przykład rekord
00001111-aaaa-2222-bbbb-3333cccc4444
z URI identyfikatora aplikacjiapi://00001111-aaaa-2222-bbbb-3333cccc4444
) - Nazwa zakresu (na przykład
API.Access
)
Ważne
Jeśli dla identyfikatora URI aplikacji używana jest wartość niestandardowa, zmiany konfiguracji są wymagane zarówno w aplikacji Server, jak i w aplikacji Client po utworzeniu aplikacji z szablonu projektu Blazor WebAssembly. Aby uzyskać więcej informacji, zobacz sekcję Używanie niestandardowego identyfikatora URI aplikacji.
Rejestrowanie aplikacji klienckiej na platformie Azure
Zarejestruj aplikację ME-ID dla aplikacji klienckiej:
- Przejdź do sekcji Microsoft Entra ID w Portal Azure. Wybierz Rejestracje aplikacji na pasku bocznym. Wybierz przycisk Nowa rejestracja.
- Podaj nazwę dla aplikacji (na przykład Blazor Client ME-IDBlazor).
- Wybierz obsługiwane typy kont. Dla tego środowiska możesz wybrać pozycję Konta tylko w tym katalogu organizacyjnym (tylko jedna dzierżawa).
- Ustaw listę rozwijaną Identyfikatora URI przekierowania na jednostronicową aplikację (SPA) i podaj następujący identyfikator URI przekierowania:
https://localhost/authentication/login-callback
. Jeśli znasz identyfikator URI przekierowania produkcyjnego dla domyślnego hosta platformy Azure (na przykładazurewebsites.net
) lub niestandardowego hosta domeny (na przykładcontoso.com
), możesz dodać identyfikator URI przekierowania produkcyjnego jednocześnie z udostępnieniem identyfikatora URI przekierowanialocalhost
. Pamiętaj, aby uwzględnić numer portu dla portów innych niż:443
w identyfikatorach URI przekierowania produkcyjnego, które dodajesz. - W tym artykule założono, że aplikacja jest zarejestrowana w dzierżawie Microsoft Entra. Jeśli aplikacja jest zarejestrowana w dzierżawie usługi Azure Active Directory B2C, Uprawnienia>pole wyboru Udziel zgody administratora na uprawnienia openid i offline_access jest dostępne i zaznaczone. Usuń zaznaczenie pola wyboru, aby wyłączyć ustawienie. W przypadku korzystania z dzierżawy usługi Active Azure Directory pole wyboru nie jest dostępne.
- Wybierz pozycję Zarejestruj.
Uwaga
Podanie numeru portu dla przekierowania URI ME-ID nie jest wymagane. Aby uzyskać więcej informacji, zobacz Ograniczenia i ograniczenia dotyczące identyfikatora URI przekierowania (adres URL odpowiedzi): Wyjątki hosta lokalnego (dokumentacja entra).
Zarejestruj identyfikator aplikacji (klienta) Client (na przykład 11112222-bbbb-3333-cccc-4444dddd5555
).
W Konfiguracje platformy uwierzytelniania>>
- Upewnij się, że URI przekierowania
https://localhost/authentication/login-callback
jest obecny. - W sekcji udzielanie uprawnień przy użyciu trybu ukrytego upewnij się, że pola wyboru tokenów dostępu i tokenów identyfikatorów nie są zaznaczone. Udzielanie uprawnień w trybie niejawny nie jest zalecane w przypadku Blazor aplikacji korzystających z biblioteki MSAL w wersji 2.0 lub nowszej. Aby uzyskać więcej informacji, zobacz Secure ASP.NET Core Blazor WebAssembly.
- Pozostałe wartości domyślne aplikacji są akceptowalne dla tego środowiska.
- Wybierz przycisk Zapisz, jeśli wprowadzono zmiany.
W Uprawnieniach API:
- Upewnij się, że aplikacja ma uprawnienie Microsoft Graph>User.Read.
- Wybierz pozycję Dodaj uprawnienie , a następnie pozycję Moje interfejsy API.
- Wybierz aplikację Server API z kolumny Nazwa (na przykład, Blazor Server ME-ID). Musisz być właścicielem rejestracji aplikacji (oraz rejestracji aplikacji API, jeśli jest to oddzielna aplikacja), aby zobaczyć API w obszarze Moje API w portalu Azure. Aby uzyskać więcej informacji, zobacz Przypisywanie właściciela aplikacji (dokumentacja firmy Microsoft Entra).
- Otwórz listę interfejsów API .
- Włącz dostęp do interfejsu API (na przykład
API.Access
). - Wybierz Przyznaj uprawnienia.
- Wybierz przycisk Udziel zgody administratora dla {NAZWA DZIERŻAWY}. Wybierz Tak, aby potwierdzić.
Ważne
Jeśli nie masz uprawnień do udzielenia zgody administracyjnej na dzierżawę w ostatnim kroku konfiguracji uprawnień API, ponieważ zgoda na korzystanie z aplikacji jest delegowana użytkownikom, musisz wykonać następujące dodatkowe czynności:
- Aplikacja musi używać zaufanej domeny wydawcy.
-
Server
W konfiguracji aplikacji w witrynie Azure Portal wybierz pozycję Uwidocznij interfejs API. W obszarze Autoryzowane aplikacje klienckie wybierz przycisk Dodaj aplikację kliencką. Dodaj identyfikator klienta aplikacjiClient
(na przykład11112222-bbbb-3333-cccc-4444dddd5555
).
Utwórz aplikację Blazor
W pustym folderze zastąp symbole zastępcze w poniższym poleceniu informacjami zarejestrowanymi wcześniej i wykonaj polecenie w wierszu poleceń.
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}"
Ostrzeżenie
Unikaj używania łączników (-
) w nazwie {PROJECT NAME}
aplikacji, które przerywają tworzenie identyfikatora aplikacji OIDC. Logika w szablonie Blazor WebAssembly projektu używa nazwy projektu jako identyfikatora aplikacji OIDC w konfiguracji rozwiązania. Przypadek Pascal () lub podkreślenia (BlazorSample
Blazor_Sample
) są akceptowalnymi alternatywami. Aby uzyskać więcej informacji, zobacz Kreski w nazwie hostowanego projektu łamią bezpieczeństwo OIDC (dotnet/aspnetcore #35337).
Symbol zastępczy | Nazwa witryny Azure Portal | Przykład |
---|---|---|
{PROJECT NAME} |
— | BlazorSample |
{CLIENT APP CLIENT ID} |
Identyfikator aplikacji (klienta) dla Client aplikacji | 11112222-bbbb-3333-cccc-4444dddd5555 |
{DEFAULT SCOPE} |
Nazwa zakresu | API.Access |
{SERVER API APP CLIENT ID} |
Identyfikator aplikacji (klienta) dla aplikacji interfejsu API serwera | 00001111-aaaa-2222-bbbb-3333cccc4444 |
{SERVER API APP ID URI GUID} |
GUID identyfikatora URI aplikacji |
00001111-aaaa-2222-bbbb-3333cccc4444 (TYLKO identyfikator GUID, pasuje do elementu {SERVER API APP CLIENT ID} ) |
{TENANT DOMAIN} |
Domena podstawowa/wydawca/najemca | contoso.onmicrosoft.com |
{TENANT ID} |
Identyfikator katalogu (dzierżawcy) | aaaabbbb-0000-cccc-1111-dddd2222eeee |
Lokalizacja wyjściowa określona opcją -o|--output
tworzy folder projektu, jeśli ten nie istnieje, i staje się częścią nazwy projektu.
Unikaj używania łączników (-
) w nazwie aplikacji, które przerywają tworzenie identyfikatora aplikacji OIDC (zobacz wcześniejsze ostrzeżenie).
Ważne
Jeśli dla identyfikatora URI aplikacji jest używana wartość niestandardowa, zmiany konfiguracji są wymagane zarówno dla aplikacji Server i Client po utworzeniu aplikacji z szablonu projektu Blazor WebAssembly. Aby uzyskać więcej informacji, zobacz sekcję Użycie niestandardowego identyfikatora URI ID aplikacji.
Uruchom aplikację
Uruchom aplikację z Server
projektu. Kiedy używasz programu Visual Studio, możesz:
Wybierz strzałkę listy rozwijanej obok przycisku Uruchom . Otwórz pozycję Konfiguruj projekty startowe z listy rozwijanej. Wybierz opcję Pojedynczy projekt startowy. Potwierdź lub zmień projekt projektu startowego na
Server
projekt.Upewnij się, że projekt
Server
jest wyróżniony w Eksploratorze rozwiązań przed uruchomieniem aplikacji przy użyciu dowolnego z następujących podejść:- Wybierz przycisk Run (Uruchom).
- Użyj polecenia Debuguj>Rozpocznij debugowanie z menu.
- Naciśnij klawisz F5.
W konsoli poleceń przejdź do
Server
folderu projektu w ramach rozwiązania.dotnet watch
Wykonaj polecenie (lubdotnet run
).
Skonfiguruj User.Identity.Name
Wskazówki w tej sekcji obejmują opcjonalne wypełnianie User.Identity.Name
wartością oświadczenia name
.
API aplikacji Server uzupełnia User.Identity.Name
wartością z typu roszczenia http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
(na przykład bbbb0000-cccc-1111-dddd-2222eeee3333@contoso.onmicrosoft.com
).
Aby skonfigurować aplikację do odbierania wartości z name
typu oświadczenia:
Dodaj przestrzeń nazw dla Microsoft.AspNetCore.Authentication.JwtBearer do pliku
Program
using Microsoft.AspNetCore.Authentication.JwtBearer;
Skonfiguruj element TokenValidationParameters.NameClaimTypeJwtBearerOptions.
builder.Services.Configure<JwtBearerOptions>( JwtBearerDefaults.AuthenticationScheme, options => { options.TokenValidationParameters.NameClaimType = "name"; });
Części rozwiązania
W tej sekcji opisano części rozwiązania wygenerowanego z szablonu projektu Blazor WebAssembly i sposób, w jaki projekty Client i Server są konfigurowane do celów referencyjnych. 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.
Konfiguracja appsettings.json
Ta sekcja dotyczy aplikacji rozwiązania Server .
Plik appsettings.json
zawiera opcje konfigurowania programu obsługi elementu nośnego JWT używanego do sprawdzania poprawności tokenów dostępu. Dodaj następującą AzureAd
sekcję konfiguracji:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "{TENANT DOMAIN}",
"TenantId": "{TENANT ID}",
"ClientId": "{SERVER API APP CLIENT ID}",
"CallbackPath": "/signin-oidc",
"Scopes": "{SCOPES}"
}
}
Przykład:
{
"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"
}
}
Ważne
Server Jeśli aplikacja jest zarejestrowana do używania niestandardowego identyfikatora URI aplikacji w środowisku ME-ID (a nie w formacie api://{SERVER API APP CLIENT ID}
domyślnym), zobacz sekcję Używanie niestandardowego identyfikatora URI aplikacji. Zmiany są wymagane w aplikacjach zarówno Server, jak i Client.
Pakiet uwierzytelniania
Ta sekcja dotyczy aplikacji rozwiązania Server .
Obsługa uwierzytelniania i autoryzowania wywołań do ASP.NET Core internetowych interfejsów API za pomocą platformy tożsamości firmy Microsoft jest udostępniana przez pakiet Microsoft.Identity.Web
.
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.
Aplikacja Server hostowanego Blazor rozwiązania utworzonego na szablonie Blazor WebAssembly zawiera Microsoft.Identity.Web.UI
pakiet. Pakiet dodaje interfejs użytkownika do uwierzytelniania użytkowników w aplikacjach internetowych i nie jest używany przez platformę Blazor .
Server Jeśli aplikacja nie będzie używana do bezpośredniego uwierzytelniania użytkowników, można bezpiecznie usunąć odwołanie do pakietu z Server pliku projektu aplikacji.
Obsługa usługi uwierzytelniania
Ta sekcja dotyczy aplikacji rozwiązania Server .
Metoda AddAuthentication
konfiguruje usługi uwierzytelniania w aplikacji i konfiguruje program obsługi elementu nośnego JWT jako domyślną metodę uwierzytelniania. Metoda AddMicrosoftIdentityWebApi konfiguruje usługi w celu ochrony internetowego interfejsu API za pomocą platformy tożsamości firmy Microsoft w wersji 2.0. Ta metoda oczekuje, że w konfiguracji aplikacji będzie sekcja AzureAd
z ustawieniami wymaganymi do inicjalizacji opcji uwierzytelniania.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"));
Uwaga
Po zarejestrowaniu pojedynczego schematu uwierzytelniania jest on automatycznie używany jako domyślny schemat aplikacji, więc nie ma potrzeby podawania go do AddAuthentication lub AuthenticationOptions. Aby uzyskać więcej informacji, zobacz Omówienie uwierzytelniania ASP.NET Core i ogłoszenie dotyczące ASP.NET Core (aspnet/Announcements #490).
- Aplikacja próbuje przeanalizować i zweryfikować tokeny w żądaniach przychodzących.
- Każde żądanie próbujące uzyskać dostęp do chronionego zasobu bez odpowiednich poświadczeń kończy się niepowodzeniem.
app.UseAuthentication();
app.UseAuthorization();
WeatherForecast kontroler
Ta sekcja dotyczy aplikacji rozwiązania Server .
Kontroler WeatherForecast
(Controllers/WeatherForecastController.cs
) uwidacznia chroniony interfejs API za pomocą atrybutu[Authorize]
zastosowanego do kontrolera. Ważne jest, aby zrozumieć, że:
-
[Authorize]
atrybut w tym kontrolerze interfejsu API jest jedyną rzeczą, która chroni ten interfejs API przed nieautoryzowanym dostępem. - Atrybut
[Authorize]
używany w aplikacji Blazor WebAssembly służy jedynie jako wskazówka dla aplikacji, że użytkownik powinien być autoryzowany, aby aplikacja działała poprawnie.
[Authorize]
[ApiController]
[Route("[controller]")]
[RequiredScope(RequiredScopesConfigurationKey = "AzureAd:Scopes")]
public class WeatherForecastController : ControllerBase
{
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
...
}
}
Konfiguracja wwwroot/appsettings.json
Ta sekcja dotyczy aplikacji rozwiązania Client .
Konfiguracja jest dostarczana przez wwwroot/appsettings.json
plik:
{
"AzureAd": {
"Authority": "https://login.microsoftonline.com/{TENANT ID}",
"ClientId": "{CLIENT APP CLIENT ID}",
"ValidateAuthority": true
}
}
Przykład:
{
"AzureAd": {
"Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
"ClientId": "11112222-bbbb-3333-cccc-4444dddd5555",
"ValidateAuthority": true
}
}
Pakiet uwierzytelniania
Ta sekcja dotyczy aplikacji rozwiązania Client .
Po utworzeniu aplikacji do korzystania z Kont Służbowych lub Szkolnych (SingleOrg
) aplikacja automatycznie otrzymuje odwołanie do pakietu dla Biblioteki Microsoft Authentication Library (Microsoft.Authentication.WebAssembly.Msal
). 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.Authentication.WebAssembly.Msal
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.
Pakiet Microsoft.Authentication.WebAssembly.Msal
przechodnio dodaje Microsoft.AspNetCore.Components.WebAssembly.Authentication
pakiet do aplikacji.
Obsługa usługi uwierzytelniania
Ta sekcja dotyczy aplikacji rozwiązania Client .
HttpClient Dodano obsługę wystąpień, które obejmują tokeny dostępu podczas podejmowania żądań do Server aplikacji.
W pliku Program
:
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"));
Symbol zastępczy {PROJECT NAME}
to nazwa projektu przy tworzeniu rozwiązania. Na przykład podanie nazwy projektu BlazorSample
skutkuje utworzeniem elementu nazwą HttpClient jako BlazorSample.ServerAPI
.
Obsługa uwierzytelniania użytkowników jest rejestrowana w kontenerze serwisowym przy użyciu metody rozszerzenia dostarczonej przez pakiet. Ta metoda konfiguruje usługi wymagane przez aplikację do interakcji z dostawcą Identity (IP).
W pliku Program
:
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
Metoda AddMsalAuthentication akceptuje wywołanie zwrotne w celu skonfigurowania parametrów wymaganych do uwierzytelnienia aplikacji. Wartości wymagane do skonfigurowania aplikacji można uzyskać z konfiguracji ME-ID witryny Azure Portal podczas rejestrowania aplikacji.
Zakresy tokenu dostępu
Ta sekcja dotyczy aplikacji rozwiązania Client .
Domyślne zakresy tokenów dostępu reprezentują listę zakresów tokenu dostępu, które są następujące:
- Uwzględnione w żądaniu logowania.
- Służy do aprowizowania tokenu dostępu bezpośrednio po uwierzytelnieniu.
Dodatkowe zakresy można dodać w pliku Program
zgodnie z potrzebami.
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
Określ dodatkowe zakresy za pomocą polecenia AdditionalScopesToConsent
:
options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");
Uwaga
AdditionalScopesToConsent nie może przydzielić delegowanych uprawnień użytkownika dla Microsoft Graph za pośrednictwem interfejsu zgody Microsoft Entra ID, gdy użytkownik po raz pierwszy korzysta z aplikacji zarejestrowanej na platformie Microsoft Azure. Aby uzyskać więcej informacji, zobacz Use Graph API with ASP.NET Core (Używanie interfejsu API programu Graph z programem ASP.NET Core Blazor WebAssembly).
Przykład domyślny zakres tokenu dostępu:
options.ProviderOptions.DefaultAccessTokenScopes.Add(
"api://00001111-aaaa-2222-bbbb-3333cccc4444/API.Access");
Aby uzyskać więcej informacji, zobacz następujące sekcje artykułu Dodatkowe scenariusze :
Tryb logowania
Ta sekcja dotyczy aplikacji rozwiązania Client .
Domyślnie framework używa trybu logowania z wyskakującym okienkiem i przełącza się na tryb logowania z przekierowaniem, jeśli nie można otworzyć wyskakującego okienka. Skonfiguruj bibliotekę MSAL do korzystania z trybu logowania przekierowania, ustawiając LoginMode
właściwość MsalProviderOptions na :redirect
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.LoginMode = "redirect";
});
Ustawieniem domyślnym jest popup
, a wartość ciągu nie uwzględnia wielkości liter.
Importuje plik
Ta sekcja dotyczy aplikacji rozwiązania Client .
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
Ta sekcja dotyczy aplikacji rozwiązania Client .
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.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>
Składnik aplikacji
Ta sekcja dotyczy aplikacji rozwiązania Client .
Składnik App
(App.razor
) jest podobny do składnika App
występującego w aplikacjach Blazor Server.
- Składnik CascadingAuthenticationState zarządza ujawnianiem 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 frameworku w kolejnych wersjach ASP.NET Core, znaczniki dla składnika App
(App.razor
) 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. Sprawdź komponent
App
(App.razor
) w wygenerowanej aplikacji.App
Sprawdź składnik (App.razor
) w źródle referencyjnym. Wybierz wersję z selektora gałęzi i wyszukaj składnik wProjectTemplates
folderze repozytorium, ponieważApp
lokalizacja składnika zmieniła się na przestrzeni lat.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, składnik
Ta sekcja dotyczy aplikacji rozwiązania Client .
Składnik RedirectToLogin
(RedirectToLogin.razor
):
- Zarządza przekierowywaniem nieautoryzowanych użytkowników do strony logowania.
- Bieżący adres URL, do którego użytkownik próbuje uzyskać dostęp, jest utrzymywany, aby użytkownik mógł wrócić na tę stronę, jeśli uwierzytelnianie zakończy się sukcesem, przy użyciu:
- 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żący rozwój nadchodzącej 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
Ta sekcja dotyczy aplikacji rozwiązania Client .
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.
- Umożliwia wylogowanie się z aplikacji.
- W przypadku użytkowników anonimowych:
- Oferuje opcję rejestracji.
- Oferuje opcję logowania.
Ze względu na to, że w kolejnych wersjach ASP.NET Core wprowadzono zmiany w strukturze, znaczniki dla składnika LoginDisplay
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. 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
, która jest równatrue
.Uwaga
Linki dokumentacji do źródła referencyjnego platformy .NET zwykle ładują domyślną gałąź repozytorium, która odzwierciedla bieżący rozwój 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
Ta sekcja dotyczy aplikacji rozwiązania Client .
Authentication
Strona utworzona przez składnik (Pages/Authentication.razor
) definiuje trasy wymagane do obsługi różnych etapów uwierzytelniania.
Składnik RemoteAuthenticatorView :
- Dostarczany jest przez pakiet
Microsoft.AspNetCore.Components.WebAssembly.Authentication
. - 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ść null (NRT) i statyczna analiza stanu wartości null przez kompilator .NET są obsługiwane w ASP.NET Core w .NET 6 lub nowszym. Przed wydaniem ASP.NET Core w .NET 6 typ string
pojawia się bez oznaczenia typu null (?
).
Składnik FetchData
Ta sekcja dotyczy aplikacji rozwiązania Client .
Składnik FetchData
pokazuje, jak:
- Aprowizuj token dostępu.
- Użyj tokenu dostępu, aby wywołać chroniony interfejs API zasobów w aplikacji Serwera .
Dyrektywa @attribute [Authorize]
wskazuje systemowi autoryzacji Blazor WebAssembly, że użytkownik musi być autoryzowany, aby móc odwiedzić ten składnik. Obecność atrybutu w Client
aplikacji nie uniemożliwia wywoływanie interfejsu API na serwerze bez odpowiednich poświadczeń. Aplikacja Server
musi również używać [Authorize]
w odpowiednich punktach końcowych, aby je prawidłowo chronić.
IAccessTokenProvider.RequestAccessToken Zajmuje się żądaniem tokenu dostępu, który można dodać do żądania w celu wywołania interfejsu API. Jeśli token jest buforowany lub usługa może aprowizować nowy token dostępu bez interakcji użytkownika, żądanie tokenu zakończy się pomyślnie. W przeciwnym razie żądanie tokenu kończy się niepowodzeniem z elementem AccessTokenNotAvailableException, który jest przechwycony w instrukcji try-catch
.
Aby uzyskać rzeczywisty token do uwzględnienia w żądaniu, aplikacja musi sprawdzić, czy żądanie zakończyło się pomyślnie, wywołując metodę tokenResult.TryGetToken(out var token)
.
Jeśli żądanie zakończyło się pomyślnie, zmienna tokenu zostanie wypełniona tokenem dostępu. Właściwość tokenu AccessToken.Value umożliwia dostęp do ciągu znaków literału, który ma być uwzględniony w nagłówku żądania Authorization
.
Jeśli nie można aprowizować tokenu bez interakcji z użytkownikiem, co spowoduje niepowodzenie żądania:
- ASP.NET Core na platformie .NET 7 lub nowszym: aplikacja przechodzi do
AccessTokenResult.InteractiveRequestUrl
przy użyciu podanejAccessTokenResult.InteractionOptions
, aby umożliwić odświeżenie tokenu dostępu. - ASP.NET Core na platformie .NET 6 lub starszej wersji: wynik tokenu zawiera adres URL przekierowania. Przejście do tego adresu URL powoduje przejście użytkownika do strony logowania i powrót do bieżącej strony po pomyślnym uwierzytelnieniu.
@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();
}
}
}
Korzystanie z dzierżawy usługi Azure Active Directory B2C
Jeśli aplikacja jest zarejestrowana w dzierżawie usługi Azure Active Directory B2C, zgodnie z opisem w Samouczku: Tworzenie dzierżawy Azure Active Directory B2C, ale postępuje zgodnie ze wskazówkami w tym artykule, identyfikator URI aplikacji jest zarządzany inaczej przez ME-ID.
Typ najemcy istniejącej dzierżawy można sprawdzić, wybierając link Zarządzaj najemcami na górze strony Przegląd organizacji ME-ID. Sprawdź wartość kolumny Typ tenanta dla organizacji. Ta sekcja dotyczy aplikacji, które są zgodne ze wskazówkami zawartymi w tym artykule, ale które są zarejestrowane w dzierżawie usługi Azure Active Directory B2C.
Zamiast identyfikatora URI aplikacji pasującego do formatu api://{SERVER API APP CLIENT ID OR CUSTOM VALUE}
, identyfikator URI aplikacji ma format https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}
. Ta różnica ma wpływ na konfiguracje Client aplikacji i Server :
W przypadku aplikacji interfejsu API serwera ustaw wartość
Audience
w pliku ustawień aplikacji (appsettings.json
), aby odpowiadała URI identyfikatora aplikacji dostarczonemu przez portal Azure, bez końcowego ukośnika."Audience": "https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}"
Przykład:
"Audience": "https://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444"
W pliku
Program
aplikacjiClient
ustaw odbiorców dla zakresu (App ID URI) tak, aby był zgodny z odbiorcami aplikacji interfejsu API serwera.options.ProviderOptions.DefaultAccessTokenScopes .Add("https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}/{DEFAULT SCOPE}");
W poprzednim zakresie URI/odbiorcy identyfikatora aplikacji jest częścią wartości
https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}
, która nie zawiera ukośnika na końcu (/
) ani nazwy zakresu ({DEFAULT SCOPE}
).Przykład:
options.ProviderOptions.DefaultAccessTokenScopes .Add("https://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444/API.Access");
W poprzednim zakresie część wartości stanowiąca URI identyfikatora aplikacji/odbiorcę to
https://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444
, która nie zawiera końcowego ukośnika (/
) ani nazwy zakresu (API.Access
).
Używanie niestandardowego identyfikatora URI aplikacji
Jeśli identyfikator URI identyfikatora aplikacji jest wartością niestandardową, musisz ręcznie zaktualizować domyślny identyfikator URI zakresu tokenu dostępu w Client aplikacji i dodać odbiorców do Server konfiguracji ME-ID aplikacji.
Ważne
Poniższa konfiguracja nie jest wymagana w przypadku używania domyślnego identyfikatora URI aplikacji api://{SERVER API APP CLIENT ID}
.
Przykładowy identyfikator URI aplikacji urn://custom-app-id-uri
i nazwa zakresu API.Access
.
W pliku
Program
aplikacji Client:options.ProviderOptions.DefaultAccessTokenScopes.Add( "urn://custom-app-id-uri/API.Access");
appsettings.json
W Server aplikacji dodajAudience
wpis z tylko URI identyfikatora aplikacji i bez końcowego ukośnika:"Audience": "urn://custom-app-id-uri"
Rozwiązywanie problemów
Rejestrowanie
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 autorytet, instancja, identyfikator dzierżawy, domena dzierżawy, identyfikator klienta lub identyfikator URI przekierowania uniemożliwia aplikacji uwierzytelnienie 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ż skonfigurowano w URI przekierowania rejestracji aplikacji powiązanej z adresem IP. Należy pamiętać, że port nie jest wymagany dla Microsoft Entra ID i aplikacji działającej na
localhost
adresie testowania deweloperskiego, ale konfiguracja portu aplikacji i port, na którym działa aplikacja, musi być zgodna z innymi adresami 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 na temat dokumentacji i zgłoszone usterki w artykułach (otwórz problem z sekcji Tej strony opinii), ale nie może zapewnić wsparcia 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 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
Jedną z metod zapobiegania wpływowi plików cookie i danych witryny na testowanie i rozwiązywanie problemów jest:
- Konfigurowanie przeglądarki
- Użyj przeglądarki do testowania, którą można skonfigurować, aby usuwała wszystkie cookie dane witryny za każdym razem, gdy przeglądarka 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 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: skorzystaj z
-inprivate
. - Google Chrome: użyj
--incognito --new-window {URL}
, gdzie{URL}
oznacza adres URL do otwarcia (na przykładhttps://localhost:5001
). - Mozilla Firefox: Użyj
-private -url {URL}
, gdzie{URL}
to adres URL, który ma zostać otwarty (na przykładhttps://localhost:5001
).
- Microsoft Edge: skorzystaj z
- 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
bin
iobj
projektu. - Przywróć i odbuduj projekt.
- 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, skorzystaj z 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
- Konfigurowanie domeny wydawcy aplikacji
- Manifest aplikacji Microsoft Entra ID: atrybut identifierUris
- Dodatkowe scenariusze zabezpieczeń dotyczące platformy ASP.NET Core Blazor WebAssembly
- Tworzenie niestandardowej wersji biblioteki JavaScript Authentication.MSAL
- Nieuwierzytelnione lub nieautoryzowane żądania internetowego interfejsu API w aplikacji z bezpiecznym klientem domyślnym
- ASP.NET Core Blazor WebAssembly z grupami i rolami Microsoft Entra ID (od .NET 5 do .NET 7)
- Platforma tożsamości Microsoft i Microsoft Entra ID z ASP.NET Core
- dokumentacja platformy tożsamości firmy Microsoft
- Szybki start: rejestrowanie aplikacji za pomocą platformy tożsamości firmy Microsoft
- Najlepsze rozwiązania w zakresie zabezpieczeń dotyczące właściwości aplikacji w identyfikatorze Entra firmy Microsoft