2015-07-30 3 views
2

поэтому я пытаюсь обеспечить веб-приложение, которое я создал с использованием весны mvc и безопасности. В настоящее время у меня есть основное имя пользователя и пароль с обычной пользовательской страницы входа, работающей с использованием специализированного поставщика проверки подлинности, чтобы предоставить заполненный объект проверки подлинности, который проверяется в отношении базы данных. Мне интересно, как реализовать второй этап ведения журнала, в котором используется TOTP? Я могу получить выдачу и проверку TOTP для работы, но я не знаю, как изменить весеннюю безопасность, чтобы принять изменение авторизации посредством отправки формы токена на другую страницу, кроме указанной мной страницы входа.Spring Security 4 2FA

+1

Существует много способов сделать это. Самое простое: a. Разрешить анонимный доступ только к странице входа; б. Разрешить доступ только для аутентифицированных пользователей на страницу ввода кода OTP; с. Разрешить доступ только для аутентифицированных пользователей с определенной ролью ко всем другим страницам. Затем перенаправьте пользователя на страницу ввода кода OTP при успешном входе в систему. При успешной записи OTP предоставите обязательную роль пользователю. Для примера реализации этой стратегии см. [Этот пост] (http://altfatterz.blogspot.in/2014/02/two-factor-authentication-with-spring.html). – manish

ответ

3

Таким образом, в основном то, что я закончил, было использование authy api (http://docs.authy.com/) для выполнения доставки и проверки TOTP. После первоначального входа я предоставляю им ROLE_PRE_AUTH и затем отправляю их на защищенную страницу для обработки TOTP. Затем я использовал

 Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
     List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(auth.getAuthorities()); 
     authorities.add(new SimpleGrantedAuthority("ROLE_USER")); 
     Authentication newAuth = new UsernamePasswordAuthenticationToken(auth.getPrincipal(), auth.getCredentials(), authorities); 
     SecurityContextHolder.getContext().setAuthentication(newAuth); 

, чтобы обновить роли пользователя, как только я подтвердил, что они имеют действительный TOTP.

+0

Это выглядит хорошо. – manish

+1

Вот ссылка на документацию, охватывающую его http://docs.spring.io/spring-security/site/docs/4.0.2.RELEASE/reference/htmlsingle/#tech-intro-sec-context-persistence – Parttimereaper

Смежные вопросы