#c# #asp.net-mvc #razor #openid-connect #keycloak
#c# #asp.net-mvc #razor #OpenID-подключение #keycloak
Вопрос:
мы внедряем новый механизм авторизации в наше существующее приложение .NET на основе Razor Framework. В качестве поставщика удостоверений мы хотим использовать Keycloak, который нам порекомендовал коллега.
Мы следовали инструкциям из этого руководства: Keycloak Owin ASP.NET Учебное пособие по MVC
Мы установили Keycloak и настроили Startup.cs, чтобы подготовить приложение к проверке подлинности с помощью keycloak:
public void ConfigureAuth(IAppBuilder app) {
const string persistentAuthType = "keycloak_cookies";
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = persistentAuthType
});
app.UseKeycloakAuthentication(new KeycloakAuthenticationOptions {
Realm = "master",
ClientId = "eservice",
ClientSecret = "<<client-Secret>>",
VirtualDirectory = "",
KeycloakUrl = "<Keycloak URL>>",
SignInAsAuthenticationType = persistentAuthType,
AuthenticationType = persistentAuthType,
UseRemoteTokenValidation = true,
DisableAudienceValidation = true,
DisableIssuerValidation = true
});
}
При запуске приложения мы получаем типичный экран входа в систему с помощью Keycloak. Но после входа в систему мы получаем следующее сообщение об ошибке:
[Исключение SecurityTokenSignatureKeyNotFoundException: IDX10501: проверка подписи не удалась. Невозможно сопоставить ‘kid’: ‘4385f0fb-2c47-4787-aece-31937e230fd9’, токен: ‘{«alg»:»HS256″, «typ»:»JWT», «kid»: «4385f0fb-2c47-4787-aece-31937e230fd9»}. {«jti»: «619b6b23-aa0f-40d3-9603-94445db7c763», «exp»: 1554799904, «nbf»: 0, «iat»: 1554798104, «iss»: «https://…
Похоже, что Keycloak использует алгоритм HS256, но мы определенно настроили RS256 для подписи JWT.
Комментарии:
1. Я думаю, что проблема возникает из-за того, что вы генерируете токен, потому что вы настраиваете свой сервер с
RSA
помощью, но вы генерируетеJWT
HS256
алгоритм with, вы должны проверить, откуда вы генерируетеJWT
, что проблема может возникнуть из-за этого2. Я также считаю, что проблема возникает в той части, где генерируется JWT (который является Keycloak) Но, как я упоминал выше, мы настроили Keycloak на использование RS256 (я мог бы сказать, что мы заставили его использовать RS256). Я добавил настройки keycloak в сообщении…