【问题标题】:Resftul Api with NodeJS for Mobile Application And 3rd Party Applications [closed]用于移动应用程序和 3rd 方应用程序的带有 Node JS 的 Restful Api [关闭]
【发布时间】:2014-04-12 14:03:20
【问题描述】:

我正在使用 NodeJS 开发一个 Restful API,它将服务于特定的移动应用程序和(可能在未来)其他 3rd 方应用程序。

经过一番搜索,我决定在开发 API 时使用 ExpressJS 作为中间件,使用 Mongoose 进行 mongo 相关操作,使用 PassportJS 进行身份验证。

但我心中仍有关于基础设施的问题,希望您能启发我。

  1. 我应该如何保护我的 API?首先我想,我可以使用 OAuth 保护所有 API 端点;但是如果使用 OAuth,移动应用程序如何使用 API?

  2. 因为第一个问题,我想;我应该开发两个 API。一个用于移动应用程序的私有 API;和一个用于第三个应用程序的公共 API。我应该吗?

  3. 这是我的第一个 NodeJS 应用程序,所以我阅读了很多关于它的内容。但是所有这些似乎都是为“Hello World”示例编写的。是否有任何文章或教程真的可以帮助我开发现实世界的应用程序?

【问题讨论】:

    标签: node.js api express oauth passport.js


    【解决方案1】:

    问题 1 和 2

    OAuth (2) 可能是一个不错的选择,您也可以安全地将其用于内部和外部应用程序。与 PassportJS 相同的作者还创建了 OAuth2orize,这是一个与 PassportJS 完美配合的 OAuth2 服务器。
    使用 OAuth2 安全可靠,您和其他人可以使用大量第三方库。
    不过……

    1. 使用 OAuth2 通常需要用户每次都进行身份验证。如果您在登录页面中添加“记住我的密码”功能,用户无需再次输入密码,但无论如何都需要打开一个 web 框架。
      一种可能的解决方案是使用过期时间较长的身份验证令牌(如果过期),但您需要确保它们被安全地传输和存储。通常,用户总是会得到一个短期令牌,然后可以将其换成一个长期令牌。这样做的原因是为了避免在响应 URL 中发送长期存在的令牌(只有在创建移动应用程序时才可以选择)。将短期令牌交换为长期令牌的请求通常需要使用应用密钥进行签名,以增加安全性(尽管在移动应用中永远不可能完全保护应用密钥)。
    2. 可以选择使用两种不同的身份验证系统。它当然更容易(如果它允许您延迟 OAuth2 的实施),更集成到您的应用程序中(您不需要加载 Web 视图来让用户登录)并且仍然同样安全。您的应用程序中有一个表单,要求输入用户名和密码并将其发送到服务器。然后,服务器会响应一个“访问令牌”,该令牌具有很长(如果有的话)到期日期。

    当然,您应该确保 所有 API 调用是通过 SSL 进行的。不仅在您发送密码时,还包括任何后续请求,因为您将发送访问令牌(这就像会话的“密码”——永不过期)。

    问题 3

    PassportJS 有 some great example code,它也可以让您开始使用 PassportJS,还可以使用 Node。

    【讨论】:

    • 感谢您的回答,但首先我想问一下您对 OAuth2 的看法?一开始我想使用 OAuth2,但在阅读了hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell 之后我放弃了。
    • @bahadirarslan 从 Facebook 到 Google,全球所有主要公司都在采用 OAuth2。规格清晰且经过深思熟虑,并且正如那篇文章本身所说,它们是安全的。他的批评者主要关注第三方可能的不良实施。如果您坚持使用经过测试的公共库并考虑自己在做什么,我怀疑您会遇到任何问题。
    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2018-05-25
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多