【问题标题】:Is it possible to authenticate against a web service and against a proxy in the same HTTP request?是否可以在同一个 HTTP 请求中针对 Web 服务和代理进行身份验证?
【发布时间】:2016-07-07 08:21:31
【问题描述】:

我有一项服务,我想从 cURL 和启用了 LDAP 基本身份验证的浏览器访问。但此服务是启用另一个基本身份验证的代理的后端。

因此,要获得我的服务,我的请求必须发送两个不同的 Basic Auth 标头。这可能吗?

【问题讨论】:

    标签: http authentication curl basic-authentication


    【解决方案1】:

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

    授权标头

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

    4.2. Authorization

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

    Authorization = credentials
    

    如果请求经过身份验证并指定了领域,则相同 凭证被假定为对所有其他请求有效 这个领域(假设认证方案本身不 要求其他,例如根据不同的凭据 挑战值或使用同步时钟)。 [...]

    代理授权标头

    要针对代理进行身份验证,请使用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. 从用户那里获取用户ID和密码,

    2. 通过连接 user-id 来构造用户通行证,单个 冒号 (":") 字符和密码,

    3. 将用户密码编码为八位字节序列,

    4. 并通过编码此八位字节序列获得基本凭证 使用Base64US-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 中发送凭据的标准标头。

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 2023-03-24
      • 2016-04-28
      • 1970-01-01
      • 2023-03-31
      • 2012-07-28
      • 2020-11-03
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多