我试图弄清楚什么是保护我的
Spring MVC控制器(仅使用json)的最佳方法.
我跟着很多问题(例如
RESTful Authentication via Spring).
我的问题虽然似乎是一个很常见的用例,但我找不到具体的答案.
要求:
>所有通信都是使用json从移动客户端(Android / iPhone)进行的.
>用户可以使用Facebook登录(使用facebook sdk进行客户端身份验证),这意味着没有密码可以发送到服务器.
>不需要BASIC身份验证,因为没有密码,我宁愿客户端轻松登录.
>重要的是没有注册屏幕,因为我想让我的用户感到轻松,当用户登录(脸书/电子邮件)服务器动态创建数据库内的用户时,如果是facebook,我不会向用户询问任何内容因为他已经在本地使用facebook sdk进行了身份验证,就电子邮件而言,服务器会要求用户输入密码,因为他可能会使用其他人的电子邮件.
我特别努力实现第4步,可能会使用Spring Security,因为我的服务器大量使用Spring.
最佳答案 我们在其中一个webapp上执行与#4类似的操作.基本上,这个过程是:
1)创建(或覆盖FacebookApiAdapter)setConnectionVales方法.
2)从Facebook个人资料中获取电子邮件(或用于内部用户名的任何内容).
3)创建一个新的Auth令牌:
UsernamePasswordAuthenticationToken newAuth = new UsernamePasswordAuthenticationToken(user, "yourrealm",authorities);
用户匹配您的内部用户类型,权限是一个Set(提示:只需添加新的SimpleGrantedAuthority字符串)
4)在SpringSecurityContext中设置新的身份验证令牌:
SecurityContextHolder.getContext().setAuthentication(newAuth);
然后,只要新令牌在其GrantedAuthorities集中具有该角色,您就可以使用普通的Spring安全设置来保护ROLE的内容.