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

Posted

技术标签:

【中文标题】REST API 和移动应用的身份验证策略【英文标题】:Authentication strategy for REST API and mobile app 【发布时间】:2014-05-15 09:35:26 【问题描述】:

我正在使用 Node.js 和 Express + MongoDB 创建一个 REST API 服务器。 此 API 将有不同的移动客户端(iosandroid),以后可能还会有一个 Web 应用程序。 我需要用户登录才能执行一些 API 请求。没有我想连接的第 3 方应用程序(没有 Facebook、Google 等)。我也不想强迫用户访问网页或类似的东西以便他们登录。

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

但是,我不确定如何实现这一点。 我对所有不同的策略感到非常困惑。这是通过 HTTPS、OAuth、OAuth 2.0、... 的基本身份验证完成的吗?我只是不知道该用什么。 还有,我真的不想在这里重新发明***,不是因为我懒,而是主要是出于安全考虑。有没有我可以用来实现这个的库?我听说过 Passport,但我不明白这是否可行。这听起来像是一个通用的东西,我敢肯定那里有一个简单的解决方案。

谢谢!

【问题讨论】:

试试:***.com/questions/17397052/… 最好在Software Recommendations Stack Exchange上寻求软件和库推荐。 【参考方案1】:

现在您可以将 Passport.js 与 JWT(JSON Web 令牌)与 Passport-JWT 一起使用。它很容易使用。

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

有不同的方式来发送令牌。看看文档就清楚了。如果没有,this 也帮了我。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

本教程中的客户端部分基于 AngularJS,但可以在移动客户端中轻松应用相同的原理(只需发出 HTTP 请求,包括在“/signin”或“/”中发布时检索到的令牌验证”)。

祝你好运!

【讨论】:

以上是关于REST API 和移动应用的身份验证策略的主要内容,如果未能解决你的问题,请参考以下文章

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

无需对移动应用进行用户身份验证即可保护私有 REST API 的最佳方法

为移动应用程序创建 API - 身份验证和授权

REST API 授权和身份验证(网络 + 移动)

Swift iOS 应用程序到 REST PHP API - 身份验证的最佳实践是啥?

如果基于 cookie 的身份验证与 REST API 一起使用,那么相同的 API 如何与移动应用程序一起使用?