🔗 特性:Bearer 认证
- 目标:使 Squid 支持 Bearer 认证协议。
- 状态:接近完成。
- 版本: 3.5+
- 开发者:AmosJeffries
- 更多信息:RFC 6750
🔗 详细信息
Bearer 是 OAuth 2.0 的一部分,在 RFC 6750 中创建的 HTTP 认证方案。想要访问某项服务的客户端需要找到该服务信任的控制服务器,向该控制服务器进行身份验证并获取一个不透明的令牌。该不透明令牌通过 HTTP 认证头传递给 HTTP 服务,该服务授予或拒绝访问。
🔗 安全影响
Bearer 令牌可以有两种方式使用,这两种方式在安全性方面差异很大。
令牌对除颁发它的 OAuth 控制服务器和验证它的验证器之外的所有人都是不透明的。它们不一定包含任何形式的客户端凭据,即使包含,用于将详细信息编码到其中的加密方法也具有任意的安全性。
然而,在某些配置下,令牌本身可能会被第三方拦截并重放(重用),以在短时间内获得对该服务的访问权。当令牌生成为随机 blob 或作为加密用户身份的容器时,它们等同于 Digest 随机数。
- 在安全形式下,Bearer 令牌被视为随机数,并且不能重放。随机数令牌比
- NTLM 和传统的(用户:密码)Basic 认证更安全,
- 比弱形式的 Digest 认证更安全,
- 大致相当于增强的(用户:编码令牌)Basic 认证,
- 大致相当于(或低于)具有真正随机数行为的强形式 Digest 认证,
- 不如 Negotiate 认证安全。
- 在弱形式下,Bearer 令牌在 TTL(生存时间)期间允许重放。风险级别随着 TTL 的延长而增加。使用短暂但非零 TTL 的 Bearer 认证比
- 传统的(用户:密码)Basic 认证更安全,
- 大致相当于 NTLM 认证和弱形式的 Digest 认证,
- 大致相当于增强的(用户:编码令牌)Basic 认证,
- 不如具有真正随机数行为的强形式 Digest 认证安全,
- 不如 Negotiate 认证安全。
由于 OAuth 提供的安全性较弱,建议仅在 HTTPS 连接上使用 Bearer 认证
有关 Squid 支持的其他方案以及身份验证的一般工作原理的详细信息,请参阅 Features/Authentication。
🔗 它在 Squid 中如何工作?
Bearer 协议既非常简单又有些复杂。Squid 的部分被有意地保持得很小且简单,以提高整体系统的安全性。
Squid 仅实现 Authorization 头字段 Bearer 令牌。备用的表单字段方法与 HTTP 代理的需求不兼容,而URI 查询参数方法则过于不安全,不可信。
身份验证辅助程序负责执行所有危险的安全加密和验证过程。客户端提供的任何凭据或令牌都会原封不动地传递给辅助程序。辅助程序向 Squid 提供用户名用于日志记录,并提供 TTL 值用于管理后续请求中的令牌。
用于执行此操作的协议行如下所述。
从 Squid 接收的输入行
channel-ID b64token [key-extras]
-
- channel-ID
-
- 这是支持并发查找的行的 ID。
-
- b64token
- 客户端在 HTTP 头中发送的不透明凭据令牌字段。
-
- key-extras
- 传递给辅助程序的附加参数,这些参数可以通过 auth_param 的 key_extras 参数进行配置。仅在 Squid-3.5 及更高版本中可用。
返回给 Squid 的结果行
channel-ID result [kv-pair]
-
- channel-ID
- 接收到的并发通道 ID。必须将其作为行上的第一个条目不变地发送回 Squid。
-
- result
- 其中一个结果代码
OK 成功。凭据有效。 ERR 成功。凭据无效。 BH 失败。帮助程序遇到问题。
-
- kv-pair
- 一个或多个 key=value 对。在此接口上保留的键名
clt_conn_tag=… 标记客户端 TCP 连接 group=… reserved message=… Squid 可以在错误页面上显示的字符串消息。 tag=… reserved ttl=… 此结果可使用的时间段。
如果未提供,则令牌被视为已过期(随机数)。user=… Squid 作为“用户名”用于此客户端请求的标签 *_=… 以 (_) 结尾的键名保留给本地管理员使用。
🔗 我需要做些什么来在 Squid 中支持 Bearer?
与任何其他安全协议一样,Squid 中的 Bearer 支持由两部分组成:
- Squid 内部与客户端通信的代码。
-
Squid-3.5 或更高版本,并使用
--enable-auth-bearer编译。
-
Squid-3.5 或更高版本,并使用
- 一个或多个执行繁重工作的身份验证辅助程序。
- 目前还没有免费的辅助程序。
当然,为了让一切正常工作,需要在配置文件中启用该协议。
auth_param bearer program /usr/sbin/your-helper
auth_param bearer realm Squid
auth_param bearer scope proxy
所有其他 Bearer 参数都是可选的。有关更多详细信息,请参阅 auth_param BEARER 部分。
🔗 测试
🔗 测试 Squid
通过 Squid 发送任何 URL 的 GET 或任何其他请求。
squidclient http://example.com/
设置正确的 Squid 会响应 Proxy-Authenticate: Bearer,如下所示。
HTTP/1.1 407 Proxy Authentication Required
Server: squid/3.5.0
Date: Thu, 12 Jan 2012 03:41:33 GMT
Proxy-Authenticate: Bearer realm="Squid", scope="proxy"
...
通过 Squid 发送带有 GET 和 Bearer 令牌的任何 URL。
squidclient -H 'Proxy-Authorization: Bearer abcd\n' http://example.com/
设置正确的 Squid 会响应请求的资源,如下所示。
HTTP/1.1 200 OK
...
🔗 故障排除
Bearer 认证使用级别 29 进行调试。
分类: WantedFeature
导航:站点搜索,站点页面,类别,🔼 向上