通过Spring MVC对移动客户端进行RESTful身份验证

时间:2013-02-17 16:28:29

标签: spring-mvc spring-security

我正在试图弄清楚什么是保护我的Spring MVC控制器(仅使用json)的最佳方法。 我跟了很多问题(比如RESTful Authentication via Spring)。 我的问题似乎是一个很常见的用例,但我找不到具体的答案。

要求:

  1. 使用json从移动客户端(Android / iPhone)进行所有通信。
  2. 用户可以使用Facebook登录(使用facebook sdk进行客户端身份验证),这意味着没有密码可以发送到服务器。
  3. 不需要BASIC身份验证,因为没有密码,我宁愿客户端轻松登录。
  4. 重要没有注册屏幕,因为我想让用户感到轻松,当用户登录(脸书/电子邮件)服务器动态创建数据库内的用户时,如果是facebook我没有问用户任何东西,因为他已经在本地使用facebook sdk进行了身份验证,对于电子邮件,服务器会要求用户输入密码,因为他可能会使用其他人的电子邮件。
  5. 我特别努力实现第4步,可能会使用Spring Security,因为我的服务器大量使用Spring。

1 个答案:

答案 0 :(得分:2)

我们在其中一个网络应用程序上执行与#4类似的操作。基本上,这个过程是:

1)创建(或覆盖FacebookApiAdapter)setConnectionVales方法。

2)从Facebook个人资料中收集电子邮件(或用于内部用户名的任何内容)。

3)创建一个新的Auth令牌:

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

其中user匹配您的内部用户类型,权限是Set(提示:只需添加带有新SimpleGrantedAuthority的字符串)

4)在SpringSecurityContext中设置新的身份验证令牌:

SecurityContextHolder.getContext().setAuthentication(newAuth);

然后,您可以使用普通的Spring安全设置来保护ROLE的内容,只要新令牌在其GrantedAuthorities集中具有该角色。