为啥我们更喜欢授权标头将承载令牌发送到服务器而不是 URL 编码等其他技术

Posted

技术标签:

【中文标题】为啥我们更喜欢授权标头将承载令牌发送到服务器而不是 URL 编码等其他技术【英文标题】:Why do we prefer Authorization Header to send bearer token to server over other techniques like URL encoding为什么我们更喜欢授权标头将承载令牌发送到服务器而不是 URL 编码等其他技术 【发布时间】:2017-04-15 15:19:15 【问题描述】:

为什么授权标头主要用于向服务器发送不记名令牌?为什么我们不将授权令牌作为 URL 参数发送或将其作为 json 有效负载与请求正文一起发布?

【问题讨论】:

【参考方案1】:

标头非常适合保存这些数据,它们与请求类型无关。

您可以在正文中发送授权令牌,甚至是 Content-TypeContent-Length、缓存标头等其他所有内容,但不同的请求类型(POSTGET..)可能具有不同的请求正文格式。 GET 使用 query parameters POST/PUT 在正文中以编码形式发送数据(使用 Content-Type: application/x-www-form-urlencoded 使服务器知道传入的数据格式),Content-Type: application/json 在正文中使用 JSON,XML 等。多部分请求的情况变得更加复杂(查看https://***.com/a/19712083/1017363)。

因此,您可以在正文或查询中看到授权令牌使客户端和服务器端的事情变得更加复杂。客户端应该知道如何在每个请求上“匹配”授权令牌,服务器应该知道如何读取这个值。

【讨论】:

以上是关于为啥我们更喜欢授权标头将承载令牌发送到服务器而不是 URL 编码等其他技术的主要内容,如果未能解决你的问题,请参考以下文章

发送带有承载令牌授权标头 (flask_restful + flask_jwt_extended) 的 GET 消息时出现“段不足”

如何将标头身份验证承载中的令牌发送到浏览器

在 Asp.Net Core 中使用 Swagger 在请求中未发送授权承载令牌

为啥 JWT 需要作为 Bearer Token 标头发送?

spring boot - 假装客户端发送基本授权标头|将 jwt 令牌从一个微服务传递到另一个微服务

使用授权承载请求时在 Firebase 函数中获取令牌