Мы разрабатываем Spring REST/JSON API, но нам нужно иметь пользовательскую службу аутентификации для аутентификации против стороннего сервиса.Весенняя безопасность 4. JSON REST с пользовательской аутентификацией и авторизацией
Ограничения: Мы не делаем, чтобы узнать у пользователя имя пользователя и пароль. мы проверяем подлинность с помощью «cookie» (отправляем с инициатором запроса). И нам нужен этот процесс аутентификации в фоновом режиме. (Может показаться странным, но это так).
мы могли бы реализовать это, используя регистрацию пользовательских фильтров проверки подлинности/авторизации. но это заставило нас потерять силу весеннего модуля «авторизации», который мы планируем использовать впоследствии.
Так что мы делали до сих пор, писал на заказ WebSecurityConfigurerAdapter с собственным обычаем AuthenticationProvider и UserDetailsService но эти конфигурации не похоже на работу.
приложение не зайти внутрь AuthenticationProvider.authenticate
здесь конфигурация у нас было.
AuthenticationProvider.java:
@Service
public class AuthenticationService implements AuthenticationProvider, UserDetailsService {
@Override
public Authentication authenticate(Authentication auth) throws AuthenticationException {
// DOESN'T ENTER THIS FUNCTION
// do authentication stuff
}
@Override
public boolean supports(Class<?> authentication) {
// JUST FOR TESTING
return true;
}
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
// DOESN'T ENTER THIS METHOD
return null;
}
}
SecurityConfig.java:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(SecurityConfig.class);
@Autowired
private AuthenticationService authService;
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/ignoredURL/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable() //HTTP with Disable CSRF
.authorizeRequests()
.antMatchers("/api/XYZ/**").hasRole("ADMIN")
.anyRequest().authenticated();
// adding ".httpBasic()" automatically prompts user for username/password
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// THIS IS NOT TYPO, I use one service implements both interfaces.
auth.userDetailsService(authService);
auth.authenticationProvider(authService);
}
}