Spring Security: несколько входов в одни и те же ресурсы: вход через форму + Facebook Connect (uid, sessionKey)

Для начала я знаю о

http://blog.kadirpekel.com/2009/11/09/facebook-connect-integration-with-spring-security/

Единственная проблема заключается в том, что он полностью заменяет форму входа в Facebook Connect.

У меня есть собственная форма входа в систему,

У меня также есть Facebook Connect. После сбора информации о пользователе я связываю ее с собственной учетной записью, но без пароля.

В этот момент я хотел бы вызвать ссылку или метод, чтобы начать процесс перехода в цепочку фильтров безопасности Spring.


Вот исходный код, который работает, но я пытаюсь изменить. Он содержит все файлы, о которых я говорю.

Теперь, насколько я понимаю, мне нужно добавить собственный FacebookAuthenticationProvider, чтобы мой AuthenticationManager знал об этом.

<bean id="facebookAuthenticationProvider" class="org.springframework.security.facebook.FacebookAuthenticationProvider">
</bean>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider ref="facebookAuthenticationProvider" />
</security:authentication-manager>

Затем в FacebookAuthenticationProvider мне пришлось бы вызывать FacebookAuthenticationToken, который брал бы мой текущий Uid facebook и SessionKey пользователя.

Затем попробуйте аутентифицировать этот токен.

Так при чем здесь FacebookAuthenticationFilter?

Я просто пытаюсь понять порядок, в котором вызываются эти 3 файла. Как будто вы пытаетесь реализовать любую другую пользовательскую аутентификацию.

FacebookAuthenticationFilter.java   
FacebookAuthenticationProvider.java     
FacebookAuthenticationToken.java    

Я также разместил это на Spring Security Forum


person Daxon    schedule 02.12.2009    source источник


Ответы (2)


Я написал статью о нескольких провайдерах аутентификации с Spring Security (например, один логин формы, один логин facebook и один логин с открытым идентификатором). Надеюсь, это поможет: http://thoean.com/programming/java/multiple-authentication-provider-with-spring-security/

person thoean    schedule 11.04.2010
comment
Спасибо, Маркус. Я пробовал это, и это работает нормально. Единственная проблема, которую я обнаружил до сих пор, заключается в том, что вызов SecurityContextHolder.getContext().getAuthentication().getPrincipal() всегда возвращает значение null вместо идентификатора пользователя Facebook. Это связано с тем, что FacebookAuthenticationToken#getPrincipal всегда возвращает значение null. Я пытался написать оболочку, которая возвращает правильный идентификатор пользователя, но безуспешно. Есть ли у вас какие-либо идеи ? - person Guido; 25.04.2010
comment
Вы убедились, что getPrincipal() вашего токена возвращает значение? Я имею в виду, какой FacebookAuthenticationToken вы используете? Я использую свой собственный - в качестве примера вы можете установить first_name и last_name пользователя facebook... или что-то еще. Надеюсь это поможет. - person thoean; 03.06.2010

Может быть, это будет полезно для вас... Я использую aop для защиты своих сервисных методов и ldapAuthenticationProvider, однако поведение было таким же и с dbAuthenticationProvider. Я заметил, что вызов SecurityContextHolder.getContext().getAuthentication().getPrincipal() перед вызовом безопасного метода всегда возвращает null, но после вызова безопасного метода он заполняется правильно. Это было с Spring security 3.0.5.RELEASE.

person Zahid    schedule 16.09.2011