Spring Boot Security Authentication из третьего API - PullRequest
0 голосов
/ 24 января 2020

Я создаю веб-приложение, используя Spring Boot + Thymeleaf, но этот проект является клиентом (не бэкэнд / не использует базу данных), я использую третий API (вход, хранение данных, загрузка данных, обновление данных, удаление данных), У меня проблема, когда реализация весенней загрузки безопасности, аутентификации по имени пользователя и паролю с третьим API, эта конечная точка для аутентификации входа в систему (третий API)

http://kuala/app/directory/user/login?j_username=admin&j_password=admin

успешный ответ

{
"isAdmin": "true",
"username": "admin"}

неудачный ответ

{
"error": {
    "date": "Fri Jan 24 10:29:26 ICT 2020",
    "code": "401",
    "message": ""
}}

этот образец SecurityConfig

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

    http.
            authorizeRequests()
            .antMatchers("/").permitAll()
            .antMatchers("/login").permitAll()
            .antMatchers("/admin/**").hasAuthority("ADMIN")
            .antMatchers("/user/**").hasAuthority("USER")
            .anyRequest()
            .authenticated().and().csrf().disable().formLogin()
            .loginPage("/login").failureUrl("/login?error=true")
            .defaultSuccessUrl("/home")
            .usernameParameter("username")
            .passwordParameter("password")
            .and().logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/").and().exceptionHandling()
            .and()
            .exceptionHandling().accessDeniedHandler(accessDeniedHandler);
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    auth.userDetailsService(appUserDetailsService);
}}

любой поможет мне, заранее спасибо

наилучшие пожелания

Хафидз

1 Ответ

0 голосов
/ 31 января 2020

Один из способов - создать свой собственный компонент AuthenticationManager и передать вызов аутентификации третьей стороне (например, с помощью RestTemplate):

@Component
public class CustomAuthenticationManager implements AuthenticationManager {
    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
         // Call your 3rd party API and return an Authentication object based
         // on its response
         ResponseEntity loginResponse = restTemplate.exchange(...);

         if(loginResponse.getStatusCode() == HttpStatus.OK) {
             // create a valid Authentication object with roles, etc
         }
         else {
             // throw an exception such as BadCredentialsException
         }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...