Hoà*_*ong 4 java security facebook spring-mvc spring-security
我有一个使用用户名/密码SpringSecurity配置的工作Web应用程序.现在我想把它移植到一个简单的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是否支持这种身份验证?如果答案是肯定的,我想知道如何做到这一点?我是否需要编写自定义身份验证提供程序来执行此操作?
更新:最后,我们自定义了SpringSecurity的身份验证方式,以便通过扩展UsernamePasswordAuthenticationFilter(声明为formLoginFilter)来接受access_token作为身份验证参数
还有来自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);
}
Run Code Online (Sandbox Code Playgroud)
UserDTO需要有一个用户名和(生成的)密码属性,需要保存在数据库中,这样你user-service(从Spring安全)可以检索它.
你正在思考正确的道路......
这是一篇关于具有spring security的多个身份验证提供程序的文章(例如,一个表单登录,一个facebook登录和一个open-id登录).
http://thoean.com/programming/java/multiple-authentication-provider-with-spring-security/
希望有所帮助:D
| 归档时间: |
|
| 查看次数: |
6839 次 |
| 最近记录: |