【问题标题】:Authorisation strategy for a first-party express based node API基于第一方 express 的节点 API 的授权策略
【发布时间】:2018-12-18 06:08:50
【问题描述】:

我正在处理我的第一个 API 的设计,并且在授权概念方面有些挣扎 - 我希望有好心人能给我一些建议!

我正在构建的内容:

  • 最终将由第三方应用和移动应用访问的 API。
  • 将使用 API 的基于 Web 的“客户端”(第一方单页应用程序)。 (这个第一方应用应该是 API 的“一部分”,还是完全独立的节点应用?)

我打算使用的技术:

  • 节点
  • 快递
  • 护照
  • Mongodb 与 Mongoose

我不是为了表达或护照而结婚,它们只是看起来是最好的选择,并且有据可查 - 我不希望一个潜在的解决方案因为其他依赖关系而被解雇。和 Mongoose 一样,我实际上更喜欢 Monk 的外观(甚至只是 Mongojs),但每个 tut 似乎都使用 mongoose,所以对于节点初学者来说似乎是最安全的选择。

验证用户很简单(我经历了很棒的Beer Locker tutorial),我正在努力解决的是持续授权。自然,我不希望用户在每次请求时都必须输入用户名和密码——这些信息是否应该存储在本地并随每个请求一起发送? (如果是这样,怎么做?我找不到任何关于通过会话处理 API 的信息)或者我应该使用某种令牌?我对“摘要”授权的少量阅读(包括啤酒储物柜教程后续)使它看起来有安全问题,至少在 Passport 实现方面(我不完全理解,但似乎相关散列密码,哪个护照不作为标准,即使添加了也只支持MD5?)。

我已经构建了一个可用的 API,我可以使用“基本”(直接通过 Postman)进行授权,所以我已经有了基础 - 授权工作,我只需要工具将其带到下一步并添加会话加入其中!

这几天我一直在努力解决这个问题,但我担心我太拘泥于更传统的本地网络应用程序工作流程 - 整个 API 的事情让我有些不知所措。

非常感谢任何帮助,即使它只是为我提供适当的教程 - 上述要求一定很常见!

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    我也遇到过这个问题……

    我只能建议一开始就这样做: http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local

    告诉我是否有帮助:)

    【讨论】:

    • 这看起来像是一个可靠的教程 - 它是针对“本地应用程序”而不是使用 API 的事实是否会成为问题?我觉得我想多了……
    • 本教程不适用于本地应用程序。它会引导您完成使用 node > express > passport 创建身份验证 API 的步骤---> 我认为这就是您所需要的?
    • 啊,我可能误读/误解了——如果是这样,那就完美了!我现在只是看了一下-会报告:)
    • 哈哈,大概就是这个标题:“入门和本地”-> 这里的本地意味着你在FB、推特等策略旁边有自己的OWN认证策略(统称localStrategy)。我浏览了整个网络,这是我发现的最好的......我使用本教程构建了一个完整的身份验证设置
    • 我不知道,我只是浏览了整个内容,不知道如何将学习成果转移到 API 模型中(据我所见,它根本不是 RESTful),什么该教程构建的只是一个标准的 Web 应用程序,没有 CRUD 调用从单独的服务来回推送数据。来自同一站点 (scotch.io/tutorials/javascript/…) 的这个 tut 似乎更合适,但不包括授权:/
    【解决方案2】:

    据我了解,您已经完成了身份验证,您现在唯一需要做的就是存储当前用户已通过身份验证的位置、他的姓名、角色等,以便稍后与其他请求一起使用。在 Passport 中,您将在 the function callback 中执行此操作(而不是“如果此函数被调用...”注释)。

    现在你必须做出决定,你有两个选择:

    1. 将用户信息(姓名、角色等)存储在您的服务器上(在会话中),并为用户提供一些长代码,用于识别他的会话以进行下一个请求

      • 将信息存储在您的服务器上,您可以使用例如express-session middleware
      • 最好将会话标识符保存在 cookie 中,但之前请阅读一些安全问题
    2. 向用户提供一些可以向您证明他/她已通过身份验证以及他/她拥有哪些姓名、角色等的东西

      • 您可以生成一个令牌,其中包含用户将随每个请求发送的用户信息(姓名、角色等)。要知道这个令牌是合法的,你必须签名。更多信息请参见 jwt.io,您可以使用 express-jwt 中间件。
      • 你不必关心这个会话的存储
      • 也可以将令牌放入 cookie,但同样存在安全问题。仍然认为 localstorage 更好(更多 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 2018-07-21
      • 2019-06-25
      • 2018-12-28
      相关资源
      最近更新 更多