Получение ошибки «Ключ подписи не найден» при использовании проверки подлинности носителя JWT с Keycloak в ASP.NET Core C#

Место общения программистов C#
Ответить
Anonymous
 Получение ошибки «Ключ подписи не найден» при использовании проверки подлинности носителя JWT с Keycloak в ASP.NET Core

Сообщение Anonymous »

Я столкнулся с ошибкой при попытке использовать аутентификацию носителя JWT в моем веб-API ASP.NET Core 8 с Keycloak. Когда я отправляю запрос к API, я получаю следующий ответ:

www-authenticate: Bearer error="invalid_token",error_description="Ключ подписи не найден"

Я настроил Keycloak и свой API со следующей конфигурацией:
  • Keycloak работает в контейнере Docker. (настроено с помощью start-dev)
  • Я настроил клиент для своего API в Keycloak и установил соответствующие учетные данные.
  • The AuthorizationUrl и TokenUrl установлены на конечные точки Keycloak
Настройка API
В Program.cs я настроил аутентификацию носителя JWT как следует:

Код: Выделить всё

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.Audience = Environment.GetEnvironmentVariable("AuthticationAudience");
options.MetadataAddress = Environment.GetEnvironmentVariable("AuthticationMetadataAddress")!;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = Environment.GetEnvironmentVariable("AuthenticationValidIssuer")
};
});
Я также настроил пользовательский интерфейс Swagger с потоком OAuth2 Keycloak:

Код: Выделить всё

options.AddSecurityDefinition("Keycloak", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows
{
Implicit = new OpenApiOAuthFlow
{
AuthorizationUrl = new Uri("http://localhost:8090/realms/primas/protocol/openid-connect/auth"),
Scopes = new Dictionary
{
{ "openid", "openid" },
{ "profile", "profile" }
}
}
}
});
Настройка Docker
Мой файл Docker Compose включает следующие службы:
  • служба keycloak (работает Keycloak)
  • служба primasapi (работает мой ASP.NET Core API)
  • mariadb, mysql , службы Redis для зависимостей баз данных
Сведения об ошибке
Несмотря на конфигурацию, когда я пытаюсь пройти аутентификацию с использованием токена JWT, я получаю это сообщение об ошибке в ответе:

www-authenticate: Bearer error="invalid_token", error_description="Ключ подписи не найден"
Я проверил что сервер Keycloak работает и токен генерируется правильно. Однако, похоже, API не может проверить токен, поскольку не может найти ключ подписи.
Что я пробовал
  • Я убедился, что URL-адрес токена и эмитент в TokenValidationParameters верны.
  • Я проверил открытые ключи из Keycloak, но API все еще не может проверить жетон. Кто-нибудь знает, что может быть причиной ошибки «ключ подписи не найден» и как ее устранить?
Заранее благодарим за любую помощь!

Заранее благодарим за любую помощь!

п>

Подробнее здесь: https://stackoverflow.com/questions/793 ... authentica
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»