1

使用 Kerberos 票证运行时,我注意到每个 firefox 请求在 HTTP 标头中都有不同的授权行。我加载了一个简单的页面,然后多次点击重新加载按钮,但它从来都不一样。是什么导致了这种行为?我原以为授权行会在 Kerberos 凭证的持续时间内保持不变。(请注意,在启动 firefox 之前,我通过 kinit 命令获得了凭据。)

当身份验证方法为 Basic 时,firefox 每次都会继续发送相同的 base64 字符串 'user:password'。这是我所期望的行为。

有任何想法吗?

4

2 回答 2

0

嗯,这很奇怪。您可以发布wireshark输出的片段的任何机会。一种可能是获得的Service Ticket没有被缓存,FF得到了Service Ticket。在某些实现中,客户端将获取服务但不缓存它,而是在每次需要时获取服务票证。有时是因为进程可能没有写权限,而且它是相对便宜的操作(单次往返和对称加密数据)

于 2012-07-26T20:34:17.040 回答
0

这是由于 HTTP 和 Negotiate-Auth 工作方式的各种限制。

HTTP 最初被设计为无状态协议,HTTP 的身份验证系统采用该模型。它旨在在每个请求中进行完整的身份验证交换;例如,使用 Basic 时,它会将您的完整凭据包含在每个请求中。使用 Negotiate-Auth 和 SPNEGO,同样的事情也是如此:创建一个全新的 GSS-API 上下文,并对每个请求执行新的身份验证。

是的,这是非常浪费的。但是(目前)没有任何标准化的方式来验证一次、建立​​会话,然后将所有后续请求绑定到该会话(例如,IMAP、POP 或 ssh 的方式)。在这方面有一些 IETF 工作,但这是非常初步的。

票据被缓存;它每次都没有做那么多工作。但是服务器和客户端每次都要经历整个 GSS-API 会话舞蹈。

于 2013-03-17T10:26:25.890 回答