为啥我应该在 `Authorization: Bearer` 标头中发送令牌?

Posted

技术标签:

【中文标题】为啥我应该在 `Authorization: Bearer` 标头中发送令牌?【英文标题】:Why should I send token in `Authorization: Bearer ` header?为什么我应该在 `Authorization: Bearer` 标头中发送令牌? 【发布时间】:2019-04-29 11:05:45 【问题描述】:

我是 API 开发的新手。目前我在请求正文中传递了我的访问/身份验证令牌。例如,


status:true,
token:"<thetoken>"

但是,当我提到 API 安全性时,他们使用 Authorization 标头来传递令牌。

我的问题是,如果我在请求正文中发送令牌,会发生什么或出了什么问题?

-- 谢谢❤ ---

【问题讨论】:

这是 OAuth 等授权方法的常见做法。 API 可以在接受内容之前对请求进行授权。这可以通过不接受未经其标头验证的请求来节省一些处理开销。您是否正在编写自己的 API? @tshimkus 是的,我正在编写自己的 API 【参考方案1】:

首先,保护 API 端点是一项已解决的任务。我建议您不要发明自己的授权协议,而是查看现有的行业标准,例如 OAuth 2.0 授权框架 (RFC 6749)。

出于多种原因,遵循标准是有意义的:

它们广为人知并经过实战考验 提供参考实现和库 您可以站在巨人的肩膀上,专注于您的业务逻辑 等

但是,在请求正文中发送访问令牌并没有错。在RFC 6750 中,OAuth 2.0 协议定义了所有可能的不记名令牌用法,包括将令牌作为Form-Encoded Body Parameter 发送。请务必仔细阅读并考虑安全因素。

长话短说:只要您遵守标准,您如何分发访问令牌并不重要。

【讨论】:

以上是关于为啥我应该在 `Authorization: Bearer` 标头中发送令牌?的主要内容,如果未能解决你的问题,请参考以下文章

User must be authenticated with Spring Security before authorization can be completed.解决方法

为啥要对 Authorization 标头进行 base64 编码?

Foxmail 邮箱只能收邮件不能发邮件,提示:501 mail from address must be same as authorization user ?

为啥 to_be_bytes() 和 to_le_bytes() 与我在这里期望的相反?

C# ASP.NET Core 5.0 - 为啥在使用 [Authorization] 时甚至不调用该方法

mysql 设置了默认值了为啥还是会报column cannot be null