后续请求的基本 HTTP 身份验证

Posted

技术标签:

【中文标题】后续请求的基本 HTTP 身份验证【英文标题】:basic HTTP authentication on subsequent requests 【发布时间】:2016-09-29 17:15:16 【问题描述】:

下图描述了基本的 HTTP 身份验证。客户端请求/family 资源,并要求它识别自己。确实如此,现在它可以访问/family。然后,客户还请求家庭领域中的/family/photos/kids 资源。

客户端已经为/family 资源标识了自己,但还没有为/family/photos/kids 标识。它们在同一个领域,但服务器不知道同一个客户端发出了请求。或者是吗?服务器如何知道该特定客户端也被允许在后续请求中访问/family/photos/kids?用户通过身份验证后,每次请求都会发送密码和用户名吗?客户是否通过弹出窗口询问他/她提出的每个请求? cookie 是在首次身份验证时设置的吗?

【问题讨论】:

【参考方案1】:

基本身份验证需要客户端发送的标头。没有 cookie 或服务器会话

当客户端请求资源时,发送授权头

GET /family
Authorization: Basic token

其中令牌是 base64(用户名:密码)。用户名后跟 ':' 和使用 base 64 编码的密码

如果您从浏览器请求受保护的资源,例如 GET 请求,并且您没有提供标头,则浏览器会显示 autenticathion 表单并记住它以用于同一域中的后续请求

【讨论】:

感谢您的光临。因此,授权标头以及 base64 编码的凭据会在所有后续请求中发送到整个域或只是 /family?它也会发送 /family/photos/kids 吗?代理授权也会发生同样的情况吗? 客户端必须在每个请求中发送标头。如果您使用浏览器向用户询问凭据,则会将它们用于同一个域。代理,例如 Apache,可用于管理授权或传递

以上是关于后续请求的基本 HTTP 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头为“基本领域 =”

Amazon S3 是不是支持带有基本身份验证的 HTTP 请求

HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是“基本领域”

HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头是“协商,NTLM”

如何在 Swift 中发出 HTTP 请求 + 基本身份验证

在 Okhttp 中处理身份验证