我正在使用Node.js和Express + MongoDB创建REST API服务器。 此API将具有不同的移动客户端(iOS,Android)以及稍后可能的Web应用程序。 我需要用户登录才能执行一些API请求。没有我想要连接的第三方应用程序(没有Facebook,谷歌等)。我也不想强迫用户访问网页或类似的内容,以便他们登录。
从我在SO上的多次搜索中看到的情况来看,最好的方法是让用户使用完整凭据登录一次,然后向他们发送一个令牌作为回报,并使用该令牌验证将来的请求,直到它过期。 / p>
但是,我不确定如何实现这一点。 我对所有不同的策略感到困惑。这是通过HTTPS进行基本身份验证,使用OAuth,OAuth 2.0,......吗?我只是不知道该用什么。 另外,我真的不想在这里重新发明轮子,不是因为我很懒,而是因为安全问题。有没有我可以用来实现这个的库?我听说过Passport,但我无法理解这是否可行。这听起来像是一般的东西,我确信那里有一个简单的解决方案。
谢谢!
答案 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请求的问题认证“)。
祝你好运!