4

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

要求:

  1. 所有通信均使用 json 从移动客户端 (Android/iPhone) 进行。
  2. 用户可以使用 facebook 登录(使用 facebook sdk 进行客户端身份验证),这意味着没有密码可以发送到服务器。
  3. 不需要基本身份验证,因为没有密码,我宁愿客户端悄悄登录。
  4. 重要的是没有注册屏幕,因为我想减轻我的用户的压力,当用户登录(facebook/email)时,服务器会在数据库中动态创建一个用户,如果是 facebook,我不会问用户任何事情他已经在本地通过 facebook sdk 进行了身份验证,至于电子邮件,服务器要求用户输入他的密码,因为他可能会使用其他人的电子邮件。

我在实施第 4 步时特别挣扎,可能会使用 Spring Security,因为我的服务器无论如何都大量使用 Spring。

4

1 回答 1

2

我们在我们的一个 web 应用程序上做了类似于 #4 的事情。基本上,过程是:

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

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

3)创建一个新的身份验证令牌:

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

其中用户与您的内部用户类型匹配,权限是一个集合(提示:只需使用新的 SimpleGrantedAuthority 添加字符串)

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

SecurityContextHolder.getContext().setAuthentication(newAuth);

然后,您可以使用正常的 Spring 安全设置通过 ROLE 保护事物,只要新令牌在其 GrantedAuthorities 集中具有该角色。

于 2013-02-28T16:11:24.647 回答