2013-02-17 3 views
4

Я пытаюсь выяснить, что является лучшим способом для защиты моих контроллеров Spring MVC (который использует только json). Я задал много вопросов (например, RESTful Authentication via Spring). Моя проблема, хотя кажется довольно распространенным вариантом использования, но я не нашел для нее конкретного ответа.RESTful Аутентификация мобильных клиентов с помощью Spring MVC

Требования:

  1. Все коммуникации сделаны с мобильных клиентов (Android/iPhone) с использованием JSON.
  2. Пользователь может войти в систему с помощью facebook (аутентификация на стороне клиента с помощью facebook sdk), что означает, что для отправки на сервер нет пароля.
  3. БАЗОВАЯ аутентификация не требуется, так как нет пароля, и я предпочел бы, чтобы клиент был достаточно логичным.
  4. ВАЖНО нет экрана регистрации, так как я хочу облегчить своих пользователей, когда пользовательский логин (facebook/email) создает сервер «на лету» пользователя внутри БД, в случае facebook я не спрашивая у пользователя что-либо, поскольку он уже прошел аутентификацию с помощью facebook sdk локально, а для электронной почты сервер просит пользователя ввести свой пароль, поскольку он может использовать чужую электронную почту.

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

ответ

2

Мы делаем что-то похожее на # 4 на одном из наших webapps. В основном, этот процесс:

1) Создайте (или переопределите для FacebookApiAdapter) метод setConnectionVales.

2) Возьмите электронное письмо (или все, что вы используете для внутренних имен пользователей) из профиля Facebook.

3) Создать новый Auth маркер:

UsernamePasswordAuthenticationToken newAuth = new UsernamePasswordAuthenticationToken(user, "yourrealm",authorities); 

где пользователь соответствует вашему внутреннему типу пользователя, и власти это Set (подсказка: просто добавить строки с новой SimpleGrantedAuthority)

4) Установить новый маркер аутентификации в SpringSecurityContext:

SecurityContextHolder.getContext().setAuthentication(newAuth); 

Затем вы можете использовать обычную установку Spring безопасности для защиты вещей от рОЛИ, до тех пор, как новый маркер имеет эту роль в их наборе разрешенных полномочий.

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