Grails Rest API与用于移动应用的OAuth
TL;DR:从编辑1读取 我试图找到一个解决方案来实现身份验证,特别是针对我的RESTAPI的OAuth,它将被移动应用程序使用 我发现了这个流行的插件(Spring Security Rest): 但问题是它是为javascript前端应用程序设计的,因此它需要一个回调url到我的前端来传递生成的令牌(如图中所示) 对于移动应用程序,我如何才能做到这一点?是否有其他插件或设计,我可以实现这一点? 我觉得奇怪的是,在Grails或Spring中,关于无状态OAuth的插件或教程并不多,但有大量的移动应用程序使用它 下面是一个用例示例:Grails Rest API与用于移动应用的OAuth,api,rest,grails,mobile,oauth,Api,Rest,Grails,Mobile,Oauth,TL;DR:从编辑1读取 我试图找到一个解决方案来实现身份验证,特别是针对我的RESTAPI的OAuth,它将被移动应用程序使用 我发现了这个流行的插件(Spring Security Rest): 但问题是它是为javascript前端应用程序设计的,因此它需要一个回调url到我的前端来传递生成的令牌(如图中所示) 对于移动应用程序,我如何才能做到这一点?是否有其他插件或设计,我可以实现这一点? 我觉得奇怪的是,在Grails或Spring中,关于无状态OAuth的插件或教程并不多,但有大量
- 用户打开移动应用程序
- 用户通过移动应用程序登录facebook
- 用户向api/orders发出请求,该请求将只返回他的订单
// api/auth/fb
def auth(){
//Extract fb_access_token
String fbAccessToken = request.JSON.?fb_access_token
//Call https://graph.facebook.com/me?access_token=fbAccessToken
def userInfo = facebookService. ... (fbAcessToken) //Method to use in the plugin
//Verify if the userInfo contains an error/doesn't contain a fbId
if(userInfo.getFbId() == null ){
respond unauthorized() // 401, Invalid access token
}
//Verify if this token is for our app
else if(userInfo.getAppSecret() != System.env.getParameter("appSecret")){
respond unauthorized() //401, token not for this app
}
//Register or login
else{
User user = User.findByFbId(userInfo.getFbId())
if(user == null){
facebookService.registerUser(userInfo) //Custom method implemented in the service
}
else{
FbToken fbToken = new FbToken(userInfo.getToken(), userInfo.getExpiration())
user.setFbAccessToken(fbToken)
}
//Login the user with spring security and let it handle the rest (token creation => storage => http answer)
}
}
下面是我们如何使用GrailsREST插件解决facebook连接的问题
- 服务器接收fbuid并使用facebook重新验证fbuid然后尝试在数据库中查找具有此fbuid的用户
- 如果用户发现,请使用电子邮件登录用户并返回令牌
- 如果找不到用户,请注册并登录该用户,并发送回令牌作为响应
如何确保FB UID是正确的?您是否在注册或登录用户之前通过调用facebook api进行检查?我们在客户端成功调用facebook api FB应返回uid。谢谢。你能快速告诉我你是如何修改SpringSecurityREST插件来处理这个流的吗?(尤其是登录部分)。你有没有推荐一个与fb交流的插件?这是我第一次用auth构建一个web应用程序(甚至是一个web应用程序…),你有没有运气让它工作?