REST API和移动应用程序的身份验证策略

时间:2014-04-03 13:42:19

标签: node.js rest authentication express oauth

我正在使用Node.js和Express + MongoDB创建REST API服务器。 此API将具有不同的移动客户端(iOS,Android)以及稍后可能的Web应用程序。 我需要用户登录才能执行一些API请求。没有我想要连接的第三方应用程序(没有Facebook,谷歌等)。我也不想强迫用户访问网页或类似的内容,以便他们登录。

从我在SO上的多次搜索中看到的情况来看,最好的方法是让用户使用完整凭据登录一次,然后向他们发送一个令牌作为回报,并使用该令牌验证将来的请求,直到它过期。 / p>

但是,我不确定如何实现这一点。 我对所有不同的策略感到困惑。这是通过HTTPS进行基本身份验证,使用OAuth,OAuth 2.0,......吗?我只是不知道该用什么。 另外,我真的不想在这里重新发明轮子,不是因为我很懒,而是因为安全问题。有没有我可以用来实现这个的库?我听说过Passport,但我无法理解这是否可行。这听起来像是一般的东西,我确信那里有一个简单的解决方案。

谢谢!

3 个答案:

答案 0 :(得分:9)

现在,您可以将Passport.js与JWT(JSON Web代币)一起使用Passport-JWT。它非常易于使用。

用户登录后,您会向用户发送令牌。令牌包含有关用户的数据,如id(当然是编码的)。在后续请求中(至少在需要身份验证的情况下),您确保客户端发送令牌。在服务器上,您只需查看令牌即可查看谁发送了请求(例如检查用户的授权)。有关JWT如何工作的更多信息check this out

发送令牌的方法有很多种。只是看看文档,它会很清楚。如果没有,this也帮助了我。

答案 1 :(得分:0)

有一个使用oauth2身份验证的RESTful服务示例:https://github.com/vedi/restifizer-example。我希望它会有所帮助。

答案 2 :(得分:0)

我觉得您需要在服务器中设置基于令牌的身份验证过程,以便您可以从不同类型的客户端(Android,iOS,Web等)发出请求。不幸的是,Passport文档(以及基于Passport的教程)似乎仅针对“Web应用程序”,所以我认为您不应该将它用于这些目的。

我按照这个很棒的教程做了类似的事情:http://code.tutsplus.com/tutorials/token-based-authentication-with-angularjs-nodejs--cms-22543

本教程中的客户端部分基于AngularJS,但可以轻松地在移动客户端中应用相同的原则(这只是在发出“/ signin”或“/”时发出包含检索到的令牌的HTTP请求的问题认证“)。

祝你好运!