澄清授权标题行为

时间:2019-05-19 13:37:44

标签: javascript html css http https

我正在为练习网站编写身份验证机制。我已经成功创建了一个安全令牌,但我希望在登录后在以后的每个请求中发送该令牌,以便对其进行授权。

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

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

此外,理想情况下,我也不想将令牌作为cookie发送。

TL; DR: 我对授权标头的行为有一些疑问:

  1. 我是否需要在每个请求中发送授权标头,否则浏览器会自动执行吗?

  2. 如果它不是自动的,则将永远不会对浏览器栏中用户输入的GET请求进行身份验证,因为没有任何JavaScript可以附加标题,如果不使用cookie,您将如何解决此问题?(页面重定向?)

  3. 如果我需要在每个请求中发送Authorization标头,那么最佳解决方案是什么?

PS

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

2 个答案:

答案 0 :(得分:0)

我会尽力回答您的问题。

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

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

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

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

答案 1 :(得分:0)

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

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

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

  

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

     

...

     

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

“我是否需要在每个请求中发送授权标头,还是浏览器会自动执行?”

浏览器会自动执行。

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