2012-04-04 5 views
1

фонаутентификации два уровня с Spring Security

Наш сайт позволяет кому-то войти в систему, используя свой зарегистрированный адрес электронной почты и пароль. Теперь мы хотим разрешить пользователям регистрироваться, используя только их личность Facebook (в качестве альтернативного метода проверки подлинности). Мы планируем сделать это с помощью Spring Social + Spring Security 3.1

Вопрос

Существует раздел на сайте, который требует, чтобы иметь пароль, независимо от того, что проверка подлинности провайдера, который Вы используете. Зарегистрированный пользователь электронной почты не зависит от этого, но пользователи Facebook (потому что у них нет пароля). Они должны генерировать один ленивый способ (первый раз пользователь Facebook нажимает на ссылку), потому что небольшой процент пользователей будет использовать эту функцию (и мы не хотим, чтобы все пользователи Facebook беспокоились о создании пароля, когда они регистр).

Итак, как бы вы это сформулировали?

Например: мы знаем, что можно определить роль безопасности с именем «REGISTERED_WITH_PASSWORD» и сделать эти страницы доступными только для этой роли. Можно ли настроить Spring таким образом, чтобы при входе в систему «без пароля» пользователь Facebook пытался ввести страницу thate, перенаправляя его на страницу создания пароля, чтобы они могли создавать и повторять попытку? (вместо того, чтобы обрабатывать это как исключение авторизации).

Любые другие идеи? Любой элегантный дизайн будет приветствоваться, независимо от того, полагается ли он на вещи, относящиеся к Spring Sec 3.1.

Спасибо,

ответ

3

наивных мыслей реализации, может быть, лучший способ существует:

  • запись пользовательские фильтры и добавить его в springSecurityFilterChain
  • макияж фильтра активного только для URL вы хотите (например, проверки URL вручную)
  • зарегистрировать его пользовательский тип аутентификации и пароль «войти/пароль прошел» и перенаправить пользователей facebook без флага для входа/пароля страница
  • сохранить флажок «логин/пароль прошел»

SecurityContextSecurityContext остается нетронутым, поэтому этот подход кажется неинтрузивным для весны.

Редактирование: форматирование

+0

относительно третьего шага: вы имеете в виду отмену цепи фильтра с перенаправлением :? – Sebastian

+0

@Sebastian, да, вызовите 'resp.sendRedirect' вместо' chain.doFilter' для пользователей facebook. – alexkasko

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