【发布时间】:2016-07-07 08:21:31
【问题描述】:
我有一项服务,我想从 cURL 和启用了 LDAP 基本身份验证的浏览器访问。但此服务是启用另一个基本身份验证的代理的后端。
因此,要获得我的服务,我的请求必须发送两个不同的 Basic Auth 标头。这可能吗?
【问题讨论】:
标签: http authentication curl basic-authentication
我有一项服务,我想从 cURL 和启用了 LDAP 基本身份验证的浏览器访问。但此服务是启用另一个基本身份验证的代理的后端。
因此,要获得我的服务,我的请求必须发送两个不同的 Basic Auth 标头。这可能吗?
【问题讨论】:
标签: http authentication curl basic-authentication
可以在同一个请求中针对您的应用程序和代理进行身份验证。
要针对您的应用程序进行身份验证,请使用 Authorization HTTP 标头:
Authorization标头字段允许用户代理进行身份验证 本身与原始服务器 - 通常,但不一定,之后 收到401(未经授权)响应。它的价值包括 包含用户身份验证信息的凭据 被请求资源领域的代理。Authorization = credentials如果请求经过身份验证并指定了领域,则相同 凭证被假定为对所有其他请求有效 这个领域(假设认证方案本身不 要求其他,例如根据不同的凭据 挑战值或使用同步时钟)。 [...]
要针对代理进行身份验证,请使用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 中发送凭据的标准标头。
【讨论】: