我正在编写一个带有HTTP基本身份验证的REST API,但在某些情况下,用户名和密码不足以让我的服务器对用户进行身份验证,我需要一个域名作为另一个参数来验证用户身份。
为什么呢?因为我的服务器针对某些第三方服务对用户进行身份验证,这可能需要用户名,密码和域作为凭据数据。
如何在基本身份验证数据中添加其他参数?是允许的吗?
答案 0 :(得分:3)
如果标准HTTP标头不符合您的需要,您可以创建自定义HTTP标头。
但是,所有身份验证数据都应在标准HTTP Authorization
标头中发送。来自RFC 7235:
<强> 4.2。授权
Authorization
标头字段允许用户代理进行身份验证 本身与原始服务器 - 通常,但不一定,后 收到401
(未经授权)回复。它的价值包括 包含用户身份验证信息的凭据 被请求资源领域的代理。 [...]
请注意,此HTTP标头的名称很不幸,因为它带有身份验证信息,而不是授权。
关于HTTP基本身份验证方案,RFC 7617定义了以下内容:
<强> 2。 &#39;基本&#39;认证计划
基本身份验证方案基于客户端的模型 需要使用每个用户ID和密码进行身份验证 保护空间(&#34;领域&#34;)。 [...]服务器只有在可以验证时才会为请求提供服务 应用于保护空间的用户标识和密码 请求的资源。
[...]
要获得授权,客户
- 获取用户ID和密码
从用户
通过连接user-id(单个)来构造用户传递 冒号(&#34;:&#34;)字符和密码
将用户传递编码为八位字节序列,
- 的序列 醇>
并通过编码此八位字节序列来获取基本凭证 将Base64用于US-ASCII characters。
[...]
如果用户代理希望发送用户ID&#34; Aladdin&#34;和密码 &#34;打开芝麻&#34;,它将使用以下标题字段:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
[...]
RFC 7617并未说明在基本身份验证中使用域名的任何内容。
但假设user-id
由域名和用户名组成,使用@
将两者分开,似乎完全有效,如下所示:
user-id = username + @ + domain