【问题标题】:Node express handle auth token from external api节点快速处理来自外部 api 的身份验证令牌
【发布时间】:2017-04-27 13:20:35
【问题描述】:

我正在制作我的第一个 node + express 应用程序,并且我正在使用一个调用外部 api 的 npm 模块。

我有一个登录页面,其中用户输入凭据,然后通过 post(ajax 客户端,app.post 服务器端)传递并用于进行初始 api 调用(使用 npm模块),它返回一个身份验证令牌。所有后续的 api 调用(使用 npm 模块)都是使用该令牌进行的。

我的问题是:处理该令牌的最佳方法是什么?将其保存在变量/对象中并将其导出,然后在需要令牌的 js 文件中使用它?使用会话(这可能是避免要求用户重新登录的好主意)并将令牌存储在该会话中?

【问题讨论】:

    标签: javascript node.js api express token


    【解决方案1】:

    我建议你使用jsonwebtoken 模块来生成令牌

    现在如何使用它

    1. 当用户尝试登录时,将这些用户名/电子邮件和密码发送到服务器。
    2. 检查用户凭据是否有效,然后使用 jwt.sign 方法生成包含 userId(或任何某个值以唯一标识用户)的令牌。
    3. 发送该令牌以响应登录请求。

    4. 在客户端接收令牌时,将其保存在某些服务中。

      (每次 API 调用 - 客户端)

    5. 在对 API 进行后续调用时,将该令牌添加到请求中(我建议将其添加到 Authorization 标头中,例如此 Authorization Bearer(令牌)。

      (每次 API 调用 - 服务器端)

    6. 现在,当服务器收到 API 请求时,它将从请求标头中获取令牌并使用 jwt.verify 方法检查令牌的有效性,当请求通过令牌验证阶段时,您可以发送请求的数据作为响应。

      注意:要添加令牌验证阶段,您可以使用 express 的中间件概念。为此,您可以创建一个单独的 Auth 模块,该模块导出一个名为 verify 的方法,您可以在其中使用 jwt.verify 并要求该 Auth 模块并将 Auth.verify 方法作为中间件

    【讨论】:

    • 我不明白在这里使用 jwt 有什么用处。我需要存储一个令牌,而不是我第一次调用时从外部 api 获得的令牌。
    • 您有两种选择将您的令牌存储在 LocalStorage/SessionStorage 中(易受跨站点脚本,即 XSS 攻击)或将其保存在 cookie 中(易受跨站点攻击)。我建议您将 JWT 存储在 Web 应用程序的 cookie 中,因为它们提供了额外的安全性和灵活性,以及​​使用现代 Web 框架防止 CSRF 的简单性。 HTML5 Web Storage 易受 XSS 攻击,具有较大的攻击面,并且可以影响所有应用程序用户的成功攻击。
    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 2017-05-15
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多