Переопределить AuthorizationEndpoint с пользовательской реализацией - PullRequest
0 голосов
/ 18 октября 2018

Я бы хотел переопределить значение по умолчанию для пружины AuthorizationEndpoint и указать свой собственный для /oauth/authorize.Я написал свой собственный контроллер

@RestController
@RequestMapping("oauth/authorize")
public class AuthorizationController {

    @RequestMapping
    public void authorize(@RequestParam Map<String, String> parameters, HttpServletResponse response) throws Exception {
     // todo   
    }

}

Однако он не отображается, так как AuthorizationEndpoint отображается на /oauth/authorize по умолчанию.Как я могу удалить стандартную реализацию?

Бонус

Причина, по которой я хочу предоставить свою собственную реализацию, заключается в том, что мои остальные API-интерфейсы не сохраняют состояние и не предоставляют сессий и / или веб-интерфейса, автономное угловое приложение делаетчто для меня и разрешает использовать passwrd grant для сервера.Поэтому я хочу перенаправить пользователя на страницу одобрения моего углового приложения и реализовать собственную конечную точку user_oauth_approval ApproveOrDeny , которую вызывает мой клиент.Я не уверен, смогу ли я установить это с помощью весны, и даже если бы я мог, пользовательская реализация, вероятно, была бы меньше хлопот.Я хотел бы услышать некоторые идеи

1 Ответ

0 голосов
/ 17 июня 2019

Вставьте свой customAuthenticationManager в новый контроллер.

@Autowired
private AuthenticationManager authenticationManager;

@RequestMapping(value = "${jwt.route.authentication.path}", method = RequestMethod.POST)
    public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtAuthenticationRequest authenticationRequest)
            throws AuthenticationException {

        Authentication customAuthentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(
                authenticationRequest.getUsername(), authenticationRequest.getPassword()));
        SecurityContextHolder.getContext().setAuthentication(authentication);

        return ResponseEntity
                .ok(new JwtAuthenticationResponse(customAuthentication.getToken(), customAuthentication.isActive()));

    }

Затем перезапишите Spring AuthenticationManager по умолчанию + AuthenticationProvider

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomAuthenticationProvider customAuthenticationProvider;

    @Autowired
    public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) {
        authenticationManagerBuilder.authenticationProvider(customAuthenticationProvider);
    }

    @Bean(name = BeanIds.AUTHENTICATION_MANAGER)
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

import org.springframework.security.authentication.AuthenticationProvider;

@Component("customAuthenticationProvider")
public class CustomAuthenticationProvider implements AuthenticationProvider {

...