Как интегрировать двухфакторную аутентификацию в Spring Security OAuth - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть требование интегрировать многофакторную аутентификацию (с использованием сторонних сервисов) в проект Spring Security. Основное требование - сначала проверить, действительны ли указанные ИД пользователя / пароль, а затем проверить, включен ли для пользователя MFA, а затем перенаправить пользователя на страницу MFA. На странице MFA будет 2 шага: 1) Если пользователь не зарегистрирован в MFA, разрешите пользователю ввести номер телефона 2) попросите пользователя ввести OTP. Если OTP правильный (оставьте API-интерфейс сторонним), затем сгенерируйте токен.

В классе CustomAuthenticationSuccessHandler я попытался перенаправить пользователя на страницу MFA, если для него включен MFA. Но при таком подходе я не могу остановить генерацию токенов до завершения MFA.

@ Открытый класс компонента CustomAuthenticationSuccessHandler расширяет SavedRequestAwareAuthenticationSuccessHandler реализует AuthenticationSuccessHandler {

AesBase64Wrapper aesBase64Wrapper = new AesBase64Wrapper();

@Autowired
private RestTemplate restTemplate;

@Autowired(required = true)
private Environment env;

public CustomAuthenticationSuccessHandler() {
    super();
}

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
        Authentication authentication) throws IOException, ServletException {

    ResponseEntity<Boolean> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, Boolean.class);

    if (responseEntity.getBody().booleanValue() == true) {
        getRedirectStrategy().sendRedirect(request, response, "/mfa?username=" + encodedUsername);
    } else {
        setDefaultTargetUrl("/home");
        try {
            String clientAddress = "";
            String sessionID = "";
            if (request != null) {
                clientAddress = request.getRemoteAddr();
                sessionID = request.getSession().getId();
            }
            ClientAddress.removeClientAddress(clientAddress, sessionID);
        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            super.onAuthenticationSuccess(request, response, authentication);
        }
    }
}

}

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