Konfigurowanie uwierzytelniania JWT Bearer
Skonfiguruj sprawdzanie tokenów w potoku.
Konfigurowanie uwierzytelniania JWT Bearer to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.
Handler JWT Bearer
ASP.NET Core weryfikuje przychodzące tokeny JWT przy użyciu handlera uwierzytelniania JWT Bearer z pakietu Microsoft.AspNetCore.Authentication.JwtBearer.
Odczytuje on token z nagłówka Authorization: Bearer ..., weryfikuje go i tworzy obiekt ClaimsPrincipal.
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearerAddAuthentication
Rejestrację rozpoczyna się od AddAuthentication. Należy ustawić domyślny schemat, aby framework wiedział, którego handlera użyć, gdy nie określono schematu.
JwtBearerDefaults.AuthenticationScheme to ciąg znaków "Bearer".
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer();Opcje AddJwtBearer
Przeciążenie AddJwtBearer przyjmuje delegat opcji, w którym konfiguruje się sposób weryfikowania tokenów.
Najważniejszą właściwością jest TokenValidationParameters.
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// configured below
};
});Weryfikacja wystawcy i odbiorcy
Należy ustawić ValidateIssuer i ValidateAudience, aby upewnić się, że token pochodzi od zaufanego wystawcy i jest przeznaczony dla danego API.
ValidIssuer i ValidAudience muszą odpowiadać claimom iss i aud w tokenie.
var tvp = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidateAudience = true,
ValidAudience = builder.Configuration["Jwt:Audience"]
};Weryfikacja klucza podpisującego
To najważniejsza z punktu widzenia bezpieczeństwa kontrola: ValidateIssuerSigningKey wraz z IssuerSigningKey. Potwierdza ona, że podpis został utworzony przy użyciu właściwego sekretu.
W przypadku podpisywania symetrycznego (HS256) należy utworzyć obiekt SymmetricSecurityKey z bajtów sekretu.
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!));
tvp.ValidateIssuerSigningKey = true;
tvp.IssuerSigningKey = key;Weryfikacja okresu ważności
ValidateLifetime = true odrzuca wygasłe tokeny, sprawdzając claime exp i nbf.
ClockSkew dodaje tolerancję na różnice wskazań zegarów między serwerami. Wartość domyślna wynosi 5 minut; w przypadku krótkotrwałych tokenów należy ją zmniejszyć.
tvp.ValidateLifetime = true;
tvp.ClockSkew = TimeSpan.FromSeconds(30);Połączenie wszystkiego
Kompletna konfiguracja w stylu produkcyjnym łączy wszystkie parametry weryfikacji w jednym miejscu.
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidateAudience = true,
ValidAudience = builder.Configuration["Jwt:Audience"],
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!)),
ValidateLifetime = true,
ClockSkew = TimeSpan.FromSeconds(30)
};
});Kolejność middleware
Sama konfiguracja nie wystarczy. Należy dodać do potoku middleware uwierzytelniania i autoryzacji, a kolejność ma znaczenie.
UseAuthentication musi znajdować się przed UseAuthorization.
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();Ochrona endpointów
Po skonfigurowaniu endpointy należy oznaczyć za pomocą [Authorize] (w przypadku kontrolerów) lub .RequireAuthorization() (w przypadku minimalnych interfejsów API), aby wymagały prawidłowego tokenu.
app.MapGet("/me", (ClaimsPrincipal user) =>
new { id = user.FindFirstValue(ClaimTypes.NameIdentifier) })
.RequireAuthorization();Korzystanie z zaufanego dostawcy
Jeśli tokeny pochodzą od zewnętrznego dostawcy tożsamości (np. Microsoft Entra ID, Auth0), należy ustawić Authority zamiast statycznego klucza.
Handler automatycznie pobierze wtedy klucze podpisujące z dokumentu wykrywania dostawcy.
.AddJwtBearer(options =>
{
options.Authority = "https://login.myidp.com/";
options.Audience = "my-api";
// Keys are fetched from the OpenID configuration endpoint
});Odczytywanie błędów weryfikacji
JWT Bearer zgłasza zdarzenia, które można wykorzystać do rejestrowania informacji lub tworzenia niestandardowych odpowiedzi, takie jak OnAuthenticationFailed i OnChallenge.
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = ctx =>
{
logger.LogWarning(ctx.Exception, "JWT validation failed");
return Task.CompletedTask;
}
};Szybkie sprawdzenie
Proszę sprawdzić znajomość konfiguracji potoku.
Podsumowanie
Skonfigurowano uwierzytelnianie JWT Bearer:
AddAuthentication(...).AddJwtBearer(...)rejestruje handler.TokenValidationParameterssteruje kontrolą wystawcy, odbiorcy, klucza podpisującego i okresu ważności.UseAuthentication()musi poprzedzaćUseAuthorization().- Dla zewnętrznych dostawców tożsamości należy używać
Authority.
Następnie: wystawianie własnych tokenów.
Często zadawane pytania
Czy lekcja „Konfigurowanie uwierzytelniania JWT Bearer” jest bezpłatna?
Tak — pełny tekst „Konfigurowanie uwierzytelniania JWT Bearer” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Konfigurowanie uwierzytelniania JWT Bearer”?
Skonfiguruj sprawdzanie tokenów w potoku. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Konfigurowanie uwierzytelniania JWT Bearer”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Struktura JWT i deklaracje
- Konfigurowanie uwierzytelniania JWT Bearer
- Wystawianie tokenów
- Tokeny odświeżania i wygaśnięcie