将域作为参数添加到HTTP基本认证

时间:2015-11-17 12:02:19

标签: rest authentication http-headers

我正在编写一个带有HTTP基本身份验证的REST API,但在某些情况下,用户名和密码不足以让我的服务器对用户进行身份验证,我需要一个域名作为另一个参数来验证用户身份。

为什么呢?因为我的服务器针对某些第三方服务对用户进行身份验证,这可能需要用户名,密码和域作为凭据数据。

如何在基本身份验证数据中添加其他参数?是允许的吗?

1 个答案:

答案 0 :(得分:3)

如果标准HTTP标头不符合您的需要,您可以创建自定义HTTP标头。

但是,所有身份验证数据都应在标准HTTP Authorization标头中发送。来自RFC 7235

  

<强> 4.2。授权

     

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

请注意,此HTTP标头的名称很不幸,因为它带有身份验证信息,而不是授权

关于HTTP基本身份验证方案,RFC 7617定义了以下内容:

  

<强> 2。 &#39;基本&#39;认证计划

     

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

     

[...]

     

要获得授权,客户

     
      
  1. 从用户

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

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

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

  8. 的序列         

    [...]

         

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

    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    
         

    [...]

RFC 7617并未说明在基本身份验证中使用域名的任何内容。

但假设user-id由域名和用户名组成,使用@将两者分开,似乎完全有效,如下所示:

   user-id = username + @ + domain