是否可以针对Web服务和同一HTTP请求中的代理进行身份验证?

时间:2016-07-07 08:21:31

标签: http authentication curl basic-authentication

我有一个服务,我想从cURL和浏览器访问,其中启用了LDAP Basic Auth。但是这个服务是代理的后端,在其上启用另一个Basic Auth。

为了达到我的服务,我的请求必须发送两个不同的Basic Auth标头。这可能吗?

1 个答案:

答案 0 :(得分:2)

可以针对您的应用程序以及针对同一请求中的代理进行身份验证。

授权标题

要对您的应用程序进行身份验证,请使用Authorization HTTP标头:

  

4.2. Authorization

     

Authorization标头字段允许用户代理进行身份验证     本身与原始服务器 - 通常,但不一定,后     收到401(未经授权)回复。它的价值包括     包含用户身份验证信息的凭据     代理请求的资源领域。

Authorization = credentials
     

如果请求已通过身份验证且指定了域,则相同     证书被认为对其中的所有其他请求有效     这个领域(假设认证方案本身没有     否则需要,例如根据a     挑战价值或使用同步时钟)。 [...]

代理授权标头

要对代理进行身份验证,请使用Proxy-Authorization HTTP标头:

  

4.4. Proxy-Authorization

     

Proxy-Authorization标题字段允许客户端识别      本身(或其用户)到需要身份验证的代理。它的      值由包含身份验证的凭据组成      代理和/或资源领域的客户信息      被要求。

 Proxy-Authorization = credentials
     

Authorization不同,Proxy-Authorization标头字段适用      仅限于使用该请求进行身份验证的下一个入站代理      Proxy-Authenticate字段。当链中使用多个代理时,      Proxy-Authorization标头字段由第一个入站消耗      希望接收凭据的代理。代理可以中继      如果是,则从客户端请求到下一个代理的凭据      代理协作认证给定的机制      请求。

基本身份验证

有关HTTP基本身份验证方案的更多详细信息,请查看RFC 7617

  

2. The 'Basic' Authentication Scheme

     

基本身份验证方案基于客户端的模型   需要使用每个用户ID和密码进行身份验证   保护空间("领域")。 [...]服务器只有在可以验证时才会为请求提供服务   应用于保护空间的用户标识和密码   请求的资源。

     

[...]

     

要获得授权,客户

     
      
  1. 从用户

  2. 获取用户ID和密码   
  3. 通过连接user-id(单个)来构造用户传递   冒号(":")字符和密码

  4.   
  5. 将用户传递编码为八位字节序列,

  6.   
  7. 并通过编码此八位字节序列来获取基本凭证   将Base64用于US-ASCII characters

  8. 的序列         

    [...]

         

    如果用户代理希望发送用户ID" Aladdin"和密码   "打开芝麻",它将使用以下标题字段:

    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    
         

    [...]

您的cURL命令行如下:

curl -X GET \
     -H "Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" \
     -H "Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" \
     "http://example.com/api"

重要!请注意,这些HTTP标头的名称很不幸,因为它们带有身份验证数据而不是授权数据。无论如何,这些是用于在HTTP中发送凭证的标准标题。