Нужно ли проверять токены JWT в REST API asp.net core 2?
У меня есть следующий код в конфигурации ядра REST API asp.net:
services
.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
.AddJwtBearer(options =>
{
options.Authority = "https://login.microsoftonline.com/XXXTenantIDXXX";
options.Audience = "XXXX clientId XXXX";
});
services.AddMvc(o =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
o.Filters.Add(new AuthorizeFilter(policy));
Это подтверждает подлинность запросов. Работает нормально.
Я обеспокоен и обеспокоен подделкой токенов jwt или токенов jwt, которые поступают из других приложений AAD в клиенте.
Я ожидаю, что приведенный выше код предоставляет всю информацию для аутентификации ядра asp.net, чтобы убедиться, что jwt действителен, и его аудитория является правильным приложением AAD.
Я хотел подтвердить свои ожидания и спросить, нужна ли мне дополнительная логика (код) для проверки токена JWT?
1 ответ
Да, Asp.Net Core Middleware проверяет токен JWT. Убедитесь, что вы конфигурируете JWT Bearer Options и параметры проверки токена, чтобы Asp.Net Core Middleware проверил его.
Например:
services.AddAuthentication(auth =>
{
auth.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
auth.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.ClaimsIssuer = jwtAuthSettings.ValidIssuer;//Your issuer
options.IncludeErrorDetails = true;
options.RequireHttpsMetadata = true;
options.SaveToken = true;
options.Validate(JwtBearerDefaults.AuthenticationScheme);
options.TokenValidationParameters = new TokenValidationParameters()
{
ClockSkew = TimeSpan.FromMinutes(30),
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtAuthSettings.ValidIssuer, //Your issuer
ValidAudience = jwtAuthSettings.ValidAudience,//Your Audience
IssuerSigningKey = jwtAuthSettings.SymmetricSecurityKey, //Your Key
NameClaimType = ClaimTypes.NameIdentifier,
RequireSignedTokens = true,
RequireExpirationTime = true
};
});