2012-07-03 4 views
16

Я пытаюсь выполнить автоматический вход, когда пользователь щелкает ссылку в своем письме с помощью Spring Security.Spring Security - автоматический вход в систему без пароля

Я видел много примеров, чтобы выполнить программный вход, как следующее:

UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password); 
try { 
    Authentication auth = authenticationManager.authenticate(token); 
    SecurityContextHolder.getContext().setAuthentication(auth); 
    repository.saveContext(SecurityContextHolder.getContext(), request, response); 
    rememberMeServices.loginSuccess(request, response, auth); 
.... 

Проблема, которую я вижу, что у меня нет оригинального пароля, так что я не могу создать UsernamePasswordAuthenticationToken. Любой другой способ входа в систему пользователя, если у меня нет обычного текстового пароля (у меня есть тот, который закодирован)?

Заранее спасибо.

+0

Можете ли вы показать конфигурацию beans? (пространство имен 'http' и' AuthenticationManager' и 'AuthenticationProviders' особенно.) – Xaerxess

+0

Они просто ответили мне ниже. В любом случае, спасибо. –

ответ

30

Будьте осторожны с тем, что вы знаете, что вы делаете с точки зрения разрешения входа в систему по электронной почте. SMTP не является безопасным протоколом, поэтому обычно плохо полагаться на кого-то, у которого есть электронное письмо как форма проверки подлинности.

Вам не нужно использовать AuthenticationManager, если вы уже знаете, что они аутентифицированы. Вместо этого вы можете просто установить проверку подлинности напрямую, как показано ниже:

Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, 
    AuthorityUtils.createAuthorityList("ROLE_USER")); 
SecurityContextHolder.getContext().setAuthentication(authentication); 

Если вы хотите полный пример, вы можете обратиться к SignupControllersecure mail в приложении, которое послужило основанием для начала работы с Spring Security 3.1 (InfoQ video of presentation).

+0

Удивительный ответ. Большое спасибо. Я не знал, что это было рискованно, но я буду анализировать, какой из них лучше всего подходит в моем случае :). –

+0

Что бы вы предложили реализовать проверку подлинности без паролей в Spring? Или, аутентификация без паролей невозможна весной? – Utku

+1

Кстати, если аутентификация по ссылке, отправленной по электронной почте, небезопасна, тогда почти никакой веб-сайт не защищен, так как почти все веб-сайты используют электронную почту для ссылок на сброс пароля. Я что-то упустил? – Utku

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