【问题标题】:Always pass http authentication header javascript始终通过 http 身份验证标头 javascript
【发布时间】:2018-06-13 13:47:43
【问题描述】:

我正在尝试使用 Node.js 创建登录和身份验证系统。我是这样处理的:

1) 用户通过 POST 方法使用表单发送他的凭据

2) 服务器根据数据库检查这些凭据

3) 如果凭据看起来正确,服务器会生成一个 jwt 令牌并将其返回给用户。

4) 从现在开始,用户总是将此令牌放在他的 http 身份验证标头中,或者至少在尝试访问受限页面时

5) 当用户尝试访问受限页面时,服务器会提取令牌并在继续之前对其进行验证。

现在我有点卡住的是第 4 步。我希望仍然能够在典型中定义我的链接

 <a href="/restricted">Click here</a>

一种方式,但要确保令牌实际上是在 http 标头中传递的。这可能吗?

所以这不是关于 api 调用,而是请求完整的网页,需要您使用令牌进行身份验证。所以我认为ajax在这里不合适。

【问题讨论】:

标签: javascript node.js http authentication jwt


【解决方案1】:

基本上,您不能使用纯 HTML 设置标题。为此,您需要使用XHR 发送请求。另一方面,您可能需要考虑将 查询标记 添加到您的 href 链接中。

首先,使用localStorage写入token

 localStorage.setItem('jsonwebtoken', 'AsdL6-4GffsdXCvS3j');

读取令牌并将其添加到您的&lt;a href&gt; 作为查询参数?token

 <a href="/restricted?token=${localStorage.getItem('jsonwebtoken')}">Click here</a>

然后修改你的服务器以接受token发送的req.query

 const token = req.query.token || req.headers['X-Access-Token'];

【讨论】:

  • 我意识到这是如何工作的,我只是希望每次用户单击链接时都将其设置在 http 标头中。
  • @WouterStandaert 我已经更新了答案。希望对您有所帮助。
  • 这似乎是一个可行的选择,尽管我已经读过通过 url 传递令牌不是最佳实践。所以我猜想使用令牌进行简单的 Web 身份验证(不是 api 或 websocket)不是一个好的选择......
  • @WouterStandaert 如果您使用 HTTPS/SSL,查询字符串参数也将被加密。此外,jwt 使用私钥签名。因此,如果任何人获得令牌,他们就无法操纵和更改其价值。
  • 是的,很抱歉耽搁了!你是对的,这实际上应该是诀窍,谢谢! :)
【解决方案2】:

不幸的是,我认为除了使用 XHR or File API 之外,没有其他方法可以将您的 JWT 令牌添加到标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2019-04-09
    • 2021-09-18
    相关资源
    最近更新 更多