Получение ошибки «Ключ подписи не найден» при использовании проверки подлинности носителя 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="The signature key was not found"
Я настроил Keycloak и свой API со следующей конфигурацией:
Настройка Keycloak:
  • Keycloak работает в контейнере Docker (настроенном с помощью start-dev).
  • Я настроил клиент для своего API в Keycloak и установите соответствующие учетные данные.
  • 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 включает следующие службы:
< ul>
[*]служба keycloak (работает Keycloak)
[*]служба primasapi (работает мой ASP.NET Core API)
[*]mariadb, mysql, службы Redis для зависимостей базы данных.

Сведения об ошибке:
Несмотря на конфигурацию, когда я пытаюсь пройти аутентификацию с помощью токена JWT, я получаю это сообщение об ошибке в ответе:

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

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

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

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

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

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

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

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