Restful + Spring Security + Mobile App的推荐堆栈

时间:2015-09-07 16:22:21

标签: spring-security spring-boot restful-authentication facebook-access-token

我正在创建一个移动应用程序,我想向用户提供使用电子邮件或Facebook帐户注册/登录的选项。

过去两天我读了很多东西,但我仍然不明白该怎么做。

我已经看到了以下链接的示例,但它对我来说有点混乱,我想使用Spring(引导)堆栈,使用Java Annotation Configuration。 http://porterhead.blogspot.com.br/2013/01/writing-rest-services-in-java-part-4.html

我发现用于其他身份验证的最佳示例是http://www.codesandnotes.be/2014/10/31/restful-authentication-using-spring-security-on-spring-boot-and-jquery-as-a-web-client/,但它是基于表单的,不适用于移动应用程序。

我头脑中的应用程序流程是:

  1. 用户尝试通过Facebook访问应用程序(使用移动SDK);
  2. Facebook返回一个令牌,发送到我的后端服务器;
  3. Spring安全性检查令牌是否有效。如果有效,请获取用户的详细信息(例如,电子邮件)。 3.1。如果我的数据库中存在该电子邮件,请将用户登录。否则,请创建新用户。
  4. 之后的步骤对我来说有点模糊。在这些检查之后,我应该将什么返回给客户?如何针对以下请求验证其令牌?

    我已经阅读了很多,但仍然无法连接点。任何帮助都将非常感激。

    提前致谢!

1 个答案:

答案 0 :(得分:2)

首先,当您将facebook-auth令牌发送到后端时,它将由facebook库检查,如spring-social,而不是spring security。所以,我只是给你一个春天社交的例子。

Facebook facebook = new FacebookTemplate(fbtoken, yourappname);
        org.springframework.social.facebook.api.User facebookUser = facebook.userOperations().getUserProfile();  // throw exception if token is not authenticated
        if(facebookUser.getId() != null){
            return true;
        }else{
            throw new AuthenticationException(configProp.getProperty("invalid token"), HttpStatus.FORBIDDEN, HttpStatus.FORBIDDEN.value());
        }

在验证facebook身份验证令牌后,您必须为您的应用创建一个唯一令牌,您可以通过

创建它
String token = UUID.randomUUID().toString()

然后这个令牌将保存在数据库中并返回到客户端。来自客户端的进一步请求,您已从客户端发送此令牌,现在此令牌将由spring security进行检查。

if(tokenValid){
   //access your app
}else{
    return "unauthorized user" 
}

注销时,您将从数据库和客户端

删除它