Проверка подлинности .NET MVC (Razor) с помощью Keycloak

#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:
Конфигурация Keycloak

При запуске приложения мы получаем типичный экран входа в систему с помощью 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 в сообщении…