Я пытаюсь использовать Keycloak в качестве поставщика OpenID.Из-за соображений соответствия я не могу использовать RSA и должен использовать ключи ECDSA для подписи токенов.Я использую ES256 для подписи токенов, сгенерированных Keycloak.
Я создал простой основной сервер asp.net, который требует аутентификации для всех контроллеров.Это пример файла startup.cs
:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
IdentityModelEventSource.ShowPII = true;
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddAuthentication(options => {
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options => {
options.RequireHttpsMetadata = false;
options.Authority = "[keycloak address]";
options.Audience = "hello";
});
services.AddSingleton<IAuthorizationHandler, DebugAuthorizationHandler>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.UseMvc();
}
}
У меня также есть клиент, который выполняет аутентификацию с Keycloak, получает токен доступа, а затем вызывает главный сервер asp.net с токеном доступа.
Ошибка вызова на сервере со следующим кодом ошибки:
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[1] Failed to validate the token.
Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10501: Signature validation failed.
Тот же код успешно выполняется при использовании RS256 для подписи токенов.
Кто-нибудь испытывал подобноевопрос