【问题标题】:Where are JWT tokens stored in this example?此示例中 JWT 令牌存储在哪里?
【发布时间】:2020-11-22 04:48:26
【问题描述】:

我是初学者,最近开始学习授权和身份验证。

所以我遇到了 JWT 并开始寻找如何在 node js 中实现它的教程。 显然有一个用于 nodejs 的 jwt 中间件,称为“jsonwebtoken”。

我看过一些关于它的视频,了解到您可以通过访问 header 来访问创建的令牌:(req.headers) Video I got the information from

code

现在我正在处理“标题”来自哪里以及它存储在哪里存储的问题。它是 html 标头还是特定的 cookie。我知道有 3 个存储(本地、会话和 cookie 存储),但它存储在这 3 个中的哪一个。

我真的很困惑

【问题讨论】:

    标签: node.js jwt storage jwt-auth express-jwt


    【解决方案1】:

    您是选择存储位置的人:在成功验证后,JWT 将被发送到客户端并存储在客户端,所以正如您所说,您应该在 3 个解决方案之间进行选择:

    1- 本地存储

    2- Cookie:易受 csrf 攻击。

    3- SessionStorage:此选项被排除在外,因为一旦您的用户关闭其窗口,存储在此处的数据就会丢失,除非您想要这种行为。

    一旦您的令牌被存储,您可以再次选择发送方式:

    1- 例如,在标头(授权)中发送,

    2- 直接在请求正文中发送(例如在 JSON 中)。

    你的后端应该知道如何从标题/正文中提取它,再次由你选择。

    请记住,您需要在每次向受保护区域发出请求时都发送它,这样每次您的后端收到对受保护区域的请求时,您都会进行无状态身份验证。

    【讨论】:

    • 非常感谢您花时间帮助我。但是锄头我到底是在 http 标头中对客户端做出这些响应吗? link
    【解决方案2】:

    简单来说,生成令牌后,您可以通过 cookie 将其作为响应发送(如果您想避免 XSS 攻击,最好使用 http-only cookie),或者只是在响应正文中发送,然后存储在 localStorage(或 cookie,如果您选择使用它)中,并在随后的 HTTP 请求中发送带有 Authorization 标头,其值为 bearer <token>,其中存储在 localStorage 中的 jwt。

    【讨论】:

    • 非常感谢您花时间帮助我。但是锄头我到底是在 http 标头中对客户端做出这些响应吗? link
    • 对客户端的响应在响应正文中。随后的请求通过标头发送。根据您用于从客户端(XHR/fetch/axios)发送请求的方式,您将有一种向请求添加标头的方法。一个好的方法是设置拦截器(如果你使用 axios)。
    猜你喜欢
    • 2016-03-15
    • 2019-04-25
    • 2021-03-12
    • 2020-09-08
    • 2019-02-06
    • 2018-07-17
    • 2020-08-22
    • 2018-06-08
    • 2014-10-28
    相关资源
    最近更新 更多