Czym są validAudience i validIssuer w JWT?

0

Czym są validAudience i validIssuer?

Jaką powinny mieć wartość?

Do tej pory myślałem, że to domeny lub konkretnie adresy, które wydają token i nim autoryzują różne zapytania do API. Obecnie jednak w moim API mam włączoną ich walidację i jaką bym treść nie podał w tych wartościach to uwierzytelnianie się tokenem zawsze przechodzi.

W przykładach i tutorialach zawsze walidacja ich jest włączona, ale nikt nie tłumaczy dokładnie po co są te wartości i między wierszami czytając domyślam się tylko, że ValidateIssuer oznacza serwer tworzący token, a ValidateAudience służy do sprawdzenia czy właściwy odbiorca się tokenem posługuje. Mimo wszystko nie wiem dokładnie "z czym to się je".

 services.AddAuthentication(opt =>
            {
                opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer = jwtSettings.GetSection("validIssuer").Value,
                    ValidAudience = jwtSettings.GetSection("validAudience").Value,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey))
                };
0

4.1.1. "iss" (Issuer) Claim

The "iss" (issuer) claim identifies the principal that issued the
JWT. The processing of this claim is generally application specific.
The "iss" value is a case-sensitive string containing a StringOrURI
value. Use of this claim is OPTIONAL.

4.1.3. "aud" (Audience) Claim

The "aud" (audience) claim identifies the recipients that the JWT is
intended for. Each principal intended to process the JWT MUST
identify itself with a value in the audience claim. If the principal
processing the claim does not identify itself with a value in the
"aud" claim when this claim is present, then the JWT MUST be
rejected. In the general case, the "aud" value is an array of case-
sensitive strings, each containing a StringOrURI value. In the
special case when the JWT has one audience, the "aud" value MAY be a
single case-sensitive string containing a StringOrURI value. The
interpretation of audience values is generally application specific.
Use of this claim is OPTIONAL.

Rozumiem treść, ale nie mam pojęcia jak to wygląda praktycznie. Przecież ktoś jak się loguje (np. POST "api/login") i otrzymuje token to później przesyła go w headerze nie zmieniony, a jak "hackuje" to zmienia np. claimsy czy userId.

Z tego co zauważyłem jednak korzystając z implementacji biblioteki Microsoft.AspNetCore.Authentication.JwtBearer; ma gdzieś czy ValidateAudience się zgadza z domeną/adressem/itd. z której przyszedł request z załączonym w nagłówku tokenie, bo interesuje go tylko czy treść tokenu nie została zmieniona (dzięki podpisowi i znanemu sekretowi). Chyba że się mylę tutaj z rozumieniem implemetacji tej bardzo popularnej paczki i czegoś nie rozumiem, bo w takim razie nie widzę sensu używania ValidateAudience i ValidateIssuer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1