Проблема реализации пользовательского SPI Keycloak Authenticator - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь реализовать пользовательский SPI Authenticator keycloack для целей аутентификации с использованием внешнего поставщика удостоверений.Пользователи уже существуют в хранилище ключей, мне нужно только подключение к пользовательскому SPI для их аутентификации.

Я следую разделу 8.3 официального руководства https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi_walkthrough,, которое очень похоже на то, что янеобходимость.

Проблема, с которой я сталкиваюсь, состоит в том, что после поток аутентификации запускается в методе "action" пользовательского Authenticator, исключение выдается из класса AuthenticationProcessor, который послеосмотр исходит из следующей проверки:

 // org.keycloak.authentication.AuthenticationProcessor - line 876
    if (authenticationSession.getAuthenticatedUser() == null) {
         throw new AuthenticationFlowException(AuthenticationFlowError.UNKNOWN_USER);
    } 

после того, как я увидел эту проблему, моей идеей попытаться решить ее, было получить пользователя (уже проверенного с внешним провайдером идентификации) из хранилища ключей и вставить его вAuthenticationSession, например:

// Connect against external Service Provider
// and asume "USER_ID" represents an already validated User

// AuthenticationFlowContext = afc is given as parameter
UserFederationManager ufm = afc.getSession().users();   // <-- PROBLEM
UserModel userFound = ufm.getUserById("USER_ID", afc.getRealm());

if (userFound != null) {
    // get reference to the authSession
    AuthenticationSessionModel asm = afc.getAuthenticationSession();
    // set authenticated user on the session
    asm.setAuthenticatedUser(userFound );
    return true;
}
return false;

Проблема с приведенным выше кодом заключается в том, что Java NoSuchMethodExceptionError генерируется в отношении метода users() класса org.keaycloak.models.KeycloackSession.Например:

11: 26: 32,628 ОШИБКА [org.keycloak.services.error.KeycloakErrorHandler] (задание по умолчанию-14) Неподходящая ошибка сервера: java.lang.NoSuchMethodError: org.keycloak.models.KeycloakSession.users () Lorg / keycloak / models / UserFederationManager;

Любое предложение, которое вы могли бы сделать, чтобы помочь мне решить эту проблему, будет высоко оценено!

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Кажется, проблема была в том, что я использовал экземпляр org.keycloak.models.UserFederationManager вместо экземпляра org.keycloak.models.UserProvider.UserFederationManager реализует UserProvider, и кажется, что более общий тип работает лучше, чем более конкретный тип в механизме инъекции, который использует этот keycloak

 // UserFederationManager ufm = afc.getSession().users();   // <-- PROBLEM
 // UserProvider ufm = afc.getSession().users();            // <-- WORKS

Даже при том, что он работает сейчас, оба ваших предложения действительны, потому чтомоя версия сборки действительно отличается от той, что во время выполнения, я решу это, чтобы избежать дальнейших ошибок.

Спасибо за ваш вклад, ребята!

1 голос
/ 03 июля 2019

Как сказал Генри, это может быть конфликт версий.У меня была похожая проблема, которая была решена с помощью этой ветки .Он предлагает вам понизить версию некоторых зависимостей, но в моем случае мы решили эту проблему, вернув наш сервер на Tomcat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...