Невозможно проверить сгенерированные Keycloak JWT, подписанные с es256 - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь использовать 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 для подписи токенов.

Кто-нибудь испытывал подобноевопрос

1 Ответ

0 голосов
/ 18 апреля 2019

После более подробного изучения проблемы, похоже, что Keycloak не возвращает стандартную подпись JWT.

В настоящее время у них есть открытый вопрос об этом.

Для получения дополнительной информации смотрите здесь

...