Две службы аутентификации в одном приложении - PullRequest
0 голосов
/ 08 июля 2019

У меня есть приложение, которое проверяет подлинность входа в систему с помощью Microsoft Active Directory, но теперь мне нужно, чтобы, если пользователь не находится в AD организации, попытайтесь выполнить проверку подлинности с помощью каталога OpenLDAP, возможно ли это при весенней загрузке водно приложение?

Как я могу указать в классе конфигурации, что есть два провайдера для аутентификации?Или мне нужно использовать обработчик или аналог для выполнения двойной аутентификации?

Мой код похож на следующий со своими фильтрами и некоторыми изменениями, но схема похожа.Источник кода: https://medium.com/@dmarko484/spring-boot-active-directory-authentication-5ea04969f220

@Configuration
@EnableWebSecurity
public class WebSecurityConfigAD extends WebSecurityConfigurerAdapter {

 @Value("${ad.domain}")
 private String AD_DOMAIN;

 @Value("${ad.url}")
 private String AD_URL;

 @Override
 protected void configure(HttpSecurity http) throws Exception {

  http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
 }

 @Override
 protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
      authManagerBuilder.authenticationProvider(activeDirectoryLdapAuthenticationProvider()).userDetailsService(userDetailsService());
 }

 @Bean
 public AuthenticationManager authenticationManager() {
     return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
 }
 @Bean
 public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
     ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(AD_DOMAIN, AD_URL);
     provider.setConvertSubErrorCodesToExceptions(true);
     provider.setUseAuthenticationRequestCredentials(true);
     return provider;
 }
}

1 Ответ

0 голосов
/ 09 июля 2019

Я также делаю то же самое в моем приложении:

  • Аутентификация против LDAP
  • Аутентификация по базе данных.

Прежде всего, сервер LDAP уже настроен. Таким образом, в файле application.properties у нас есть вся информация, необходимая для подключения к серверу LDAP, и логическое поле для проверки, хотим ли мы проходить аутентификацию на сервере LDAP или нет.

project.ldap.server.protocol=
project.ldap.server.host.name=
project.ldap.server.ip=
project.ldap.server.port=
project.ldap.service.url=
project.ldap.authentication=(false/true)

Сервис, который будет выполнять аутентификацию на сервере LDAP

@Service
public class LDAPAuthenticationConnectorService {

    @Value("${project.ldap.server.protocol}")
    private String LDAP_SERVER_PROTOCOL;

    @Value("${project.ldap.server.ip}")
    private String LDAP_SERVER_IP;

    @Value("${project.ldap.server.port}")
    private int LDAP_SERVER_PORT;

    @Value("${project.ldap.service.url}")
    private String LDAP_SERVICE_URL;

    /**
     * 
     * @param loginDto
     * @throws ADAuthenticationException
     */
    public String authenticate(LoginDto loginDto) throws ADAuthenticationException{//logic }

Теперь в FacadeImplementation вы можете сделать следующее:

 public class LoginFacadeImpl implements LoginFacadeInt {
       @Value("${project.ldap.authentication}")
        private Boolean isProjectLDAPAuthenticationEnabled;
    @Override
        public UserDto authenticateUser(String userName, String password) {
    try {
                authenticateViaLDAP(userName, password);
            } catch (Exception e1) {
                //do authetication against database
                UserEntity userEntityForAuthentication = 
                UserManagementDaoInt.authenticateUser(userName,
                        AuthenticationUtils.convertPasswordToSha256(password));
}

Надеюсь, это поможет :) Дайте мне знать:)

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