【问题标题】:Clarification of Authorization header behaviour澄清授权标头行为
【发布时间】:2019-10-06 01:56:38
【问题描述】:

我正在为一个实践网站编写认证机制。我已经设法创建了一个安全令牌,但我希望在登录后的每个后续请求中都发送它,以便他们可以被授权。

理想情况下,我希望将其设置为授权标头,但我认为如果用户通过浏览器栏转到 URL,则不会设置标头。

如何让客户端在每次访问我的域时记住发送授权标头?

另外,我最好不要将令牌作为 cookie 发送。

TL;DR: 我有几个关于 Authorization Header 行为的问题:

  1. 我需要在每个请求中发送授权标头,还是浏览器自动发送?

  2. 1234563
  3. 如果我需要在每个请求中发送授权标头,最好的解决方案是什么?

PS

我正在使用没有任何框架的 javascript。

【问题讨论】:

  • 您使用的是哪种身份验证? OAuth2.0 的BasicDigestBearer?我猜是Bearer,因为您在@Veselin 的回答中发表了评论。只是为了确保。
  • 目前我还没有实现任何东西,但我想实现 Bearer。另外我想补充一下,我使用的是 vanillaJS,没有框架
  • 对于BasicDigest,浏览器会自动发送Authorization header。请检查我的答案。不幸的是,对于Bearer,我在相应的 RFC 中没有找到任何有趣的描述。

标签: javascript html css http https


【解决方案1】:

我会尽力回答你的问题。

  1. 如果您想对用户进行身份验证,则需要在每个请求中发送授权标头。您可以在此link

  2. 找到有关授权标头的更多信息
  3. 我不明白这个问题。例如,如果您在浏览器栏中输入 www.facebook.com,您将进入 Facebook 主页。如果用户没有令牌,显示登录页面,或重定向到 www.facebook.com/login。如果用户有令牌,请转到主页并在标题中发送令牌。 Facebook 将令牌存储在 cookie 中,例如,您可以将其存储在 Locale 存储中。

  4. 最好的方法是什么?成功登录后,API 会为我提供令牌,我将其保存到本地存储中。然后在每次请求时,我都会发送令牌。如果数据库中的令牌相同,我得到了数据。如果令牌与数据库中的令牌不同,我会重定向到登录页面。

我希望这能回答你的问题。

【讨论】:

  • 在您的第二个答案中,您说如果用户有令牌,facebook.com 会将您发送到您的 facebook 主页。但是token是通过Authorization header发送的,Authorization header需要通过javascript(header.Set)设置。我的问题是当用户从浏览器栏访问时 facebook.com 如何接收令牌,提前致谢!
  • 当您第一次访问 www.facebook.com 时,Facebook 会检查您的 cookie 中是否有令牌。然后,如果你有那个令牌,他会渲染 HomeTpl.html。如果您没有令牌,facebook 将呈现 LoginTpl.html。尝试登录 facebook 并删除您的 cookie。 Facebook 将注销您。您要问的问题可能是这样的:当您输入 url 、 www.facebook.com 并按搜索时会发生什么?
  • 好的,这种行为对“cookies”有效,我完全同意。我想知道您如何使用授权标头而不使用 cookie 来管理它?提前致谢! (授权:Bearer Token)
  • 您需要将该令牌存储在某处。检查此link。也检查一下这个link
【解决方案2】:

对于BasicDigest 身份验证中的Authorization 标头,您的问题的答案是:

“我如何让客户端记住每次访问我的域时发送授权标头?”

只要符合RFC2617,客户端就会自动记住并发送授权头:

客户端应该假设所有路径都在或深于 Request-URI 的路径字段中的最后一个符号元素也是 位于基本领域值指定的保护空间内 当前的挑战。客户端可以抢先发送 相应的 Authorization 标头,其中包含对资源的请求 该空间没有收到来自服务器的另一个挑战。 (2 基本认证方案)

...

客户端应该记住用户名、密码、nonce、nonce count 和 与身份验证会话关联的不透明值用于 在未来的请求中构造 Authorization 标头 保护空间。 (3.3 摘要操作)

“我需要在每个请求中发送 Authorization Header,还是浏览器自动发送?”

浏览器会自动完成。

对于Bearer 身份验证(OAuth 2.0)中的Authorization 标头,我进行了搜索,但在RFC6750 中没有找到任何类似的描述

【讨论】:

  • 我会对这些领域做更多的研究,但仍然不清楚标头如何“自动”从本地存储中获取数据。访问令牌的本地存储密钥是否也必须遵循一些预定义的方案?
  • 对于BasicDigest,您无需执行任何操作。它与本地存储无关。 RFC 规范要求“自动”行为。
  • "浏览器会自动完成。"显然不是真的。浏览器会自动发送 cookie,但不会发送授权标头。我们有一个网站,用户无法访问图像,因为浏览器不会自动发送 auth 标头,我们必须在每个请求上手动设置它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多