401 Kerberos中的未身份验证响应


刚刚注意到,使用 Kerberos

身份验证时,客户端浏览器始终首先获得 401 响应(使用 WWW-Authenticate:协商标头),然后在下一个请求中发送实际的 Kerberos 令牌进行身份验证(由浏览器内部处理)。

第一次很好,但是对于每个后续请求,为什么要重复此过程?一旦客户端知道服务器支持 kerberos,为什么客户端不存储一个cookie来指示每次我需要发送身份验证令牌?

我知道 NTLM 协议是这样设计的,但想了解为什么?

HTTP 是无状态的。除非服务器告诉客户端它应该保持状态(通过服务器cookie),否则客户端永远不应该假设服务器的意图。

更重要的是,假设任何一方都可以做Kerberos是错误的。服务器最初表示它想要协商,而协商包含一组按首选顺序排列的可用协议(Kerberos,NTLM等)。当客户端可以看到 KDC 时,它可以执行 Kerberos,但它可以在任何/大多数情况下执行 NTLM,并且它更喜欢 Kerberos。

此外,一旦客户端通过身份验证,服务器可能会使用会话 cookie 进行响应。浏览器不理解内容,所以它不知道发生了什么。然后,服务器必须始终向浏览器指示它需要再次进行身份验证(通过 401 + WWW-身份验证)。

最新更新