К сожалению, я довольно невежественен, когда дело касается JWT и аутентификации, но позвольте мне объяснить, что я наблюдаю.
Код, работающий с .NET 7, выглядит примерно следующим образом:
Код: Выделить всё
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateIssuerSigningKey = true,
ValidateAudience = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
options.Authority = KeyCloakOptions.Authority;
options.MetadataAddress = $"{options.Authority}/.well-known/openid-configuration";
options.RequireHttpsMetadata = false;
options.RefreshOnIssuerKeyNotFound = true;
options.Audience = KeycloakOptions.AudienceInvoice;
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
_logger.LogDebug("Authentication failed: " + context);
return Task.CompletedTask;
},
OnTokenValidated = context =>
{
_logger.LogDebug("JWT Bearer Token Validated.");
return Task.CompletedTask;
}
};
IDX10204: Unable для проверки эмитента. validationParameters.ValidIssuer имеет значение NULL или пробел И validationParameters.ValidIssuers имеет значение NULL или пусто.
Это можно решить, изменив TokenValidationParameters, включив в него эмитента. , через:
Код: Выделить всё
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateIssuerSigningKey = true,
ValidateAudience = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero,
ValidIssuer = KeyCloakOptions.Authority
};
IDX10208: невозможно проверить аудиторию. validationParameters.ValidAudience имеет значение null или пробел, а validationParameters.ValidAudiences имеет значение null.
И опять же, это можно преодолеть, изменив TokenValidationParameters, включив в него аудитория, через:
Код: Выделить всё
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateIssuerSigningKey = true,
ValidateAudience = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero,
ValidIssuer = KeyCloakOptions.Authority,
ValidAudience = KeycloakOptions.AudienceInvoice
};
Однако мой главный вопрос заключается в том, почему мне теперь нужно включать такие вещи, как Эмитент, Аудитория и Ключи в TokenValidationParameters, тогда как раньше это работало нормально как часть параметров. Похоже, что некоторые параметры, такие как options.MetadataAddress, игнорируются в .NET 8, поэтому теперь мне нужно явно указать значения в TokenValidationParameters.
Или, возможно, более фундаментальный вопрос: нужно ли мне что-то добавить/изменить, чтобы тот же (или очень похожий код), который работал в .NET 7, работал и в .NET 8.
Спасибо за любую помощь,
Эрик
Подробнее здесь: https://stackoverflow.com/questions/783 ... e-to-net-8
Мобильная версия