为啥 JWT 需要作为 Bearer Token 标头发送?
Posted
技术标签:
【中文标题】为啥 JWT 需要作为 Bearer Token 标头发送?【英文标题】:Why does JWT need to be sent as a Bearer Token header?为什么 JWT 需要作为 Bearer Token 标头发送? 【发布时间】:2018-10-23 04:11:54 【问题描述】:我正在为旧版 Rails 后端添加全新前端的 JWT Auth。
根据 HTTP 请求,似乎大多数消息来源建议我通过 Bearer Header 将令牌发送回服务器。
为什么?通过标头(承载或基本)发送的附加价值是什么。我不能简单地将 JWT 通过 .json 传递回服务器并从那里验证令牌。
Authorization 标头给我带来了什么好处,更重要的是,Bearer Authorization 标头给我带来了什么?
我当然可以简单地效仿每个人的例子,但想了解原因。不记名文档很冗长,很难理解我通过简单地将 JWT 作为请求中数据的一部分发送所获得的内容。
谢谢。
【问题讨论】:
最好将身份验证和有效负载分开。如果您决定以后做 Kerberos、SAML 或其他任何事情怎么办? 【参考方案1】:从技术上讲,您可以使用 JTW 在每个请求上发送一个 json 正文,但这将是非标准行为(例如,GET 请求不应通过规范具有正文)。
更标准的方法是提供Authorization
HTTP 标头。
Authorization
标头并非特定于 JWT,它的作用是指定客户端和服务器之间的身份验证方案。
另一种方法是将 JWT 包含在 cookie 中,但这会使行为浏览器特定,而 HTTP 标头几乎可以由任何 HTTP 客户端发送。
附言
请记住,与浏览器自动发送的 Auth cookie 不同,Authorization
标头需要由客户端明确设置。
【讨论】:
非常明确,谢谢。我没有想过(a)不在所有请求上发送 json 和(b)与 cookie 不同的行为,我不可避免地会遇到这种行为。非常感激。 -科比以上是关于为啥 JWT 需要作为 Bearer Token 标头发送?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net Core 3.0 JWT Bearer Token 没有 SecurityTokenValidator 可用