【问题标题】:Adding domain as parameter to HTTP basic authentication将域作为参数添加到 HTTP 基本身份验证
【发布时间】:2016-01-25 21:48:16
【问题描述】:

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

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

如何向基本身份验证数据添加另一个参数?是否允许?

【问题讨论】:

  • 域名确实是用户名的一部分吗?
  • 所以它应该如下所示:username@domain:password 编码 base64?所以标题会这样吗?授权:基本 dXNlcm5hbWVAZG9tYWluOnBhc3N3b3Jk

标签: rest authentication http-headers


【解决方案1】:

如果标准 HTTP 标头不能满足您的需求,您可以创建自定义 HTTP 标头。

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

4.2.授权

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

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

关于 HTTP 基本身份验证方案,RFC 7617 定义如下:

2。 “基本”身份验证方案

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

[...]

为了获得授权,客户端

  1. 从用户那里获取用户ID和密码,

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

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

  4. 并通过编码此八位字节序列获得基本凭证 使用Base64US-ASCII characters 的序列中。

[...]

如果用户代理希望发送用户 ID“Aladdin”和密码 “芝麻开门”,它将使用以下头字段:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

[...]

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

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

   user-id = username + @ + domain

【讨论】:

  • 问题是当您的用户名是电子邮件地址时,难以解析
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 2011-11-12
相关资源
最近更新 更多