如何在我的所有请求查询字符串中包含 JSON webtoken

Posted

技术标签:

【中文标题】如何在我的所有请求查询字符串中包含 JSON webtoken【英文标题】:How to include JSON webtoken in all my request query string 【发布时间】:2018-02-04 08:33:42 【问题描述】:

我刚刚学会了如何使用 JSON webtoken。我已经能够在登录时生成 JSON Webtoken,还可以设置中间件来验证我的令牌并保护低于 JSON 验证中间件的路由。

每次我尝试访问受保护的路由时,我都会通过在 GET 请求的末尾添加:?token=gwt3r7r.... 来手动包含令牌。 我知道在真正的应用程序中不应该是这种情况。我希望这是动态完成的。

如何动态完成?

【问题讨论】:

提示: 发送令牌时不要使用查询参数,而是使用 http 标头,例如 Authorization: <token> 你是如何向服务器发出请求的? 是的,我正在向服务器发出请求。 我在问how,您是在使用邮递员进行测试,还是使用 jquery ajax 或其他一些 npm 包(如 axiosfetchrequesthttp 或还有什么? 抱歉造成误解。我正在从我的网络浏览器发送 http 请求。 Web 浏览器已连接到我的本地服务器。我还安装了邮递员并连接到我的本地服务器。我用两个测试 【参考方案1】:

提示:不要使用查询参数来发送令牌,而应该使用 HTTP 标头来完成此任务。

从使用你的 nodejs api 的前端应用程序,你可以使用像 axios 这样的包向你的服务器发出请求。

当用户成功登录后,您可以使用

axios.defaults.headers.common['Authorization'] = token;

要为以后的每个请求设置默认令牌,请使用此包。

更新 #1

在邮递员中,您只需按ctrl + s 即可保存您的请求以及令牌以供将来使用。对于标题,他们有Header presets

您可以将常用的标题一起保存在标题预设中。在“标题”选项卡下,您可以通过从右侧的“预设”下拉列表中选择“管理预设”来为您的请求添加标题预设。

您可以参考this link,进一步了解如何充分发挥邮递员的潜力。

【讨论】:

【参考方案2】:

将令牌放入 URL 不是一个好习惯。

将令牌作为Authorization header 更好,但是如果每次发送HTTP请求之前都必须组装这样的header,那将是乏味的。此外,此解决方案仅适用于 Ajax 请求,在访问新 URL/页面时不起作用(页面保护) - 如果用户手动访问 /secure/my-account 页面会发生什么?在页面重定向之前没有机会定义请求标头。

要在所有HTTP请求中自动包含jwt令牌,您可以在登录成功时将其作为Cookie:

res.cookie('token', newToken);

这样token Cookie通过Set-Cookie响应头存储在浏览器中,并自动发送到服务器。

在服务器端,要从每个 HTTP 请求中获取令牌,可以使用以下函数:

var getTokenFromRequest = function(req) 
  if (req.cookies.token) 
    return req.cookies.token;
  
  return null;
;

【讨论】:

【参考方案3】:

实际上,在 url 末尾添加 jwt 令牌并不是一个好习惯。您应该将其作为 headers 传递。

您可以做的是,您可以将它作为Authorization 标头传递,并且在节点js 端您可以获得它,如果您执行以下行:

var token = req.headers['Authorization']

【讨论】:

以上是关于如何在我的所有请求查询字符串中包含 JSON webtoken的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 请求中,如何查找字符串最后一部分中包含数字的所有记录(最后一个空格之后)

Ionic 2中包含多个页面的GET请求

如何在 JWT 中包含身份角色声明?

如何在 json 中包含图像文件? [复制]

如何在 JSFL 文件中包含一些 js 文件?

如何在选择案例语句中包含数字和字符串