Запрос на Sling Пользовательский модуль входа - PullRequest
0 голосов
/ 07 февраля 2019

Я создал пользовательский поток аутентификации для аутентификации с использованием внешнего поставщика.Насколько я понимаю, вот поток выполнения.

  1. CustomAuthenticationHandler (расширение DefaultAuthenticationFeedbackHandler и внедрение AuthenticationHandler, AuthenticationFeedbackHandler): это извлекает учетные данные и вызывает соответствующий модуль входа в системуиспользуя конфигурацию JAAS.
  2. CustomLoginModule (расширение AbstractLoginModule).Это вызывает провайдера идентификации, опционально назначает дополнительные группы.
  3. CustomIdentityProvider (реализация ExternalIdentityProvider): Здесь аутентификация должна выполняться путем вызова API аутентификации моего внешнего провайдера.

Аутентификация работает нормально, я имею в виду

1> 2> 3 работает нормально, и я могу вызывать API и аутентифицировать пользователя.

Я получаю информацию о пользователе из API в (3), и я передаю его (2) через CustomUser (с расширением ExtenalUser).

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

Как я могу передать эти данные из (2) в (1)?

Что я пробовал до сих пор?

Я создал объект AuthInfo и вызвал объект setInfoInfo класса LoginModule.Это не работает.Ни один из пользовательских параметров, заданных мной в authInfo, не доступен в

public boolean authenticationSucceeded(HttpServletRequest request,
            HttpServletResponse response, AuthenticationInfo authInfo)

, который я переписал в классе CustomAuthenticationHandler.Как я могу получить свои пользовательские параметры в CustomAuthenticationHandler?

1 Ответ

0 голосов
/ 08 февраля 2019

Я не думаю, что вам нужно 2 и 3. В методе extractCredentials вы можете вызвать API для аутентификации и метод authenticationSucceeded для назначения пользователя группам.

Если вы хотите использовать настраиваемые параметры для использования, вам нужно реализовать org.apache.sling.auth.core.spi.AuthenticationInfoPostProcessor или этот интерфейс в вашем пользовательском классе пост-аутентификации.

Выможет получить объект AuthInfo в методе процесса

@Component
@Service
public class CustomAuthPostProcess implements AuthenticationInfoPostProcessor {
 @Override
public void postProcess(final AuthenticationInfo authenticationInfo,
        final HttpServletRequest httpServletRequest,
        final HttpServletResponse httpServletResponse)
        throws LoginException {
 // Your logic
   }  
 }
...