我有一个服务,我想从cURL和浏览器访问,其中启用了LDAP Basic Auth。但是这个服务是代理的后端,在其上启用另一个Basic Auth。
为了达到我的服务,我的请求必须发送两个不同的Basic Auth标头。这可能吗?
答案 0 :(得分:2)
可以针对您的应用程序以及针对同一请求中的代理进行身份验证。
要对您的应用程序进行身份验证,请使用Authorization
HTTP标头:
Authorization
标头字段允许用户代理进行身份验证 本身与原始服务器 - 通常,但不一定,后 收到401
(未经授权)回复。它的价值包括 包含用户身份验证信息的凭据 代理请求的资源领域。Authorization = credentials
如果请求已通过身份验证且指定了域,则相同 证书被认为对其中的所有其他请求有效 这个领域(假设认证方案本身没有 否则需要,例如根据a 挑战价值或使用同步时钟)。 [...]
要对代理进行身份验证,请使用Proxy-Authorization
HTTP标头:
Proxy-Authorization
标题字段允许客户端识别 本身(或其用户)到需要身份验证的代理。它的 值由包含身份验证的凭据组成 代理和/或资源领域的客户信息 被要求。Proxy-Authorization = credentials
与
Authorization
不同,Proxy-Authorization
标头字段适用 仅限于使用该请求进行身份验证的下一个入站代理Proxy-Authenticate
字段。当链中使用多个代理时,Proxy-Authorization
标头字段由第一个入站消耗 希望接收凭据的代理。代理可以中继 如果是,则从客户端请求到下一个代理的凭据 代理协作认证给定的机制 请求。
有关HTTP基本身份验证方案的更多详细信息,请查看RFC 7617:
2. The 'Basic' Authentication Scheme
基本身份验证方案基于客户端的模型 需要使用每个用户ID和密码进行身份验证 保护空间("领域")。 [...]服务器只有在可以验证时才会为请求提供服务 应用于保护空间的用户标识和密码 请求的资源。
[...]
要获得授权,客户
- 获取用户ID和密码
从用户
通过连接user-id(单个)来构造用户传递 冒号(":")字符和密码
将用户传递编码为八位字节序列,
- 的序列 醇>
并通过编码此八位字节序列来获取基本凭证 将Base64用于US-ASCII characters。
[...]
如果用户代理希望发送用户ID" Aladdin"和密码 "打开芝麻",它将使用以下标题字段:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
[...]
您的cURL命令行如下:
curl -X GET \
-H "Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" \
-H "Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" \
"http://example.com/api"
重要!请注意,这些HTTP标头的名称很不幸,因为它们带有身份验证数据而不是授权数据。无论如何,这些是用于在HTTP中发送凭证的标准标题。