Интеграция аутентификации Facebook в Spring Security в FacebookApp - PullRequest
4 голосов
/ 20 июня 2011

У меня есть работающее веб-приложение, которое использует имя пользователя / пароль в конфигурации SpringSecurity.Теперь я хочу перенести его в простое приложение Facebook.По какой-то причине я хочу выполнить аутентификацию, используя возвращенный токен доступа facebook, а также сохранить валидатор имени пользователя и пароля.

Подробно, я бы проверил токен доступа пользователя facebook для аутентификации, возвращенный:

https://graph.facebook.com/oauth/access_token?client_id=[my_api_key]&redirect_uri=[my_redirect_uri]&client_secret=[my_api_secret]&code=[code]

Пользователю не нужно указывать имя пользователя / пароль, поскольку они уже вошли в систему с помощью Facebook.Но я хотел бы сохранить (имя пользователя / пароль) конфигурацию безопасности Spring, чтобы пользователи могли входить на моем исходном веб-сайте.

Поддерживает ли SpringSecurity такой тип аутентификации?Если ответ да, интересно, как это можно сделать?Нужно ли мне писать собственный провайдер (ы) аутентификации для этого?

UPDATE : В конце мы настроили способ аутентификации SpringSecurity, чтобы он принимал access_token в качестве параметра аутентификациирасширив UsernamePasswordAuthenticationFilter (объявив его formLoginFilter)

Ответы [ 2 ]

9 голосов
/ 20 июня 2011

Есть еще один проект от Spring: Spring Social , который очень полезен.

Поддерживает несколько социальных сетей. Я успешно использовал его для аутентификации в Facebook. Затем я написал небольшую функцию для входа пользователя Facebook в контекст Spring Security:

protected void authenticate(UserDTO user){
    SecurityContextHolder.getContext().getAuthentication();
    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());
    token.setDetails(new WebAuthenticationDetails(getRequest()));
    Authentication authentication = authenticationManager.authenticate(token);
    SecurityContextHolder.getContext().setAuthentication(authentication);
}

UserDTO должен иметь атрибут имени пользователя и (сгенерированного) пароля и должен быть сохранен в базе данных, чтобы ваш user-service (из Spring security) мог его получить.

5 голосов
/ 20 июня 2011

Вы идете по правильному пути ...

Вот статья о нескольких провайдерах аутентификации с пружинной безопасностью (например, одна форма входа в систему, одна регистрация в Facebook и одна регистрация с open-id).

http://thoean.com/programming/java/multiple-authentication-provider-with-spring-security/

Надеюсь, что поможет: D

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