无法使用node.js验证移动客户端(使用passport.js)

时间:2014-05-26 22:40:55

标签: node.js passport.js

我尝试使用node.js构建一些CRUD应用程序作为后端API(快速) 和web-app(骨干)和移动客户端(原生android)作为前端。(我是node.js初学者)

我的服务器解决方案基于以下精彩教程'easy-node-authentication'

在我的Android应用程序中,在使用Google Plus SDK完成身份验证步骤后,我设法让用户获得Google-Token。(手机直接向google-plus请求)。

我试图理解并找到正确而优雅的方式来重复使用给定的Google令牌并通过Google-Plus帐户再次验证我的Android用户,以确保移动客户端拥有真实令牌,然后添加新的条目(id,token,email,name)到我的节点后端的用户表DB。

问题是:如果我想保持我的后端没有变化,我的下一步应该是什么?我应该将带有令牌的GET请求作为cookie发送到/ auth / google吗?也许到/ auth / google /回调?另一个网址?这有意义吗?

请注意:我已经意识到上面提到的“easy-node-auth'解决方案基于会话和cookie。话虽如此,我仍然试图了解是否有一种方便的方法来集成(android和节点),因为它适用于我的网络应用程序和节点。

2 个答案:

答案 0 :(得分:2)

据我所知,这个场景有点独特,因为你有一个客户端(Android应用程序),它已经自己进行身份验证而不使用你的后端应用程序。但后端应用程序将用于后续请求,您需要对该后端应用程序进行身份验证吗?如果是这样,那么我认为,当你构建它时,你会遇到在后端系统上信任你的客户的问题,除非它可以验证客户端的凭据。如果后端系统可以某种方式验证此令牌(来自Google)属于某个用户,那么您可以强制执行授权。否则,后端系统会信任所有拥有任何"令牌的客户端。无论质量如何(如果我的理解错误,请再次纠正我)。

如果后端系统可能是从Google检索此令牌的系统,那么它可能会更好,这将使其负责身份验证。客户端可能会发送必要的凭据,可以发送这些凭证来创建令牌。从那时起,您可以轻松地使用cookie在HTTP请求中来回传输令牌。

另一种选择是使用用户名/密码组合构建单独的身份验证方案,该方案与手机检索的令牌分开。在没有以某种方式验证客户端的情况下,很难保护来自任何客户端的后端数据(如果这是您的意图)。

一旦您决定如何对用户进行身份验证,根据用户是否经过身份验证来限制您的API相对容易(使用Passport,如上所述)。在客户端,我发现一个简单的模式是,如果任何API返回401(未授权),则将用户重定向到登录页面。

答案 1 :(得分:2)

好的我在facebook身份验证方面遇到了同样的问题。最简单的方法是仅使用http://scotch.io/tutorials/javascript/easy-node-authentication-google中描述的SIGNUP解决方案,但在客户端保留google auth LOGIN。 无论客户端使用您的应用程序,您的身份验证流程都必须相同。 (浏览器,Android应用等)。

所以你需要做以下事情(这里有很好的描述https://developers.google.com/accounts/docs/OAuth2UserAgent):

  1. 使用AJAX在浏览器端(使用JS SDK)设置Google oauth2登录。 AJAX响应应该包含某种访问令牌。

  2. 对于从浏览器或本机客户端发出的每个请求,请在Authorization标头中发送google访问令牌,并使用nodeJS对https://www.googleapis.com/oauth2/v1/tokeninfo进行检查。这将为您提供用户ID(您在注册阶段保存在数据库中)并检查令牌的有效性。

  3. 所以它是第一次,但你应该摆脱在谷歌上进行OAuth2登录的护照模块。 事实证明第2步可以使用nodeJS passport-google-token 模块完成!所以这不应该是太多的工作。

    祝你好运