0Pricing
C# Academy · Lekcja

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.JwtBearer

AddAuthentication

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.
  • TokenValidationParameters steruje 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

  1. Struktura JWT i deklaracje
  2. Konfigurowanie uwierzytelniania JWT Bearer
  3. Wystawianie tokenów
  4. Tokeny odświeżania i wygaśnięcie
← Powrót do C# Academy