Kerberos中的401取消身份验证响应

时间:2019-01-25 13:09:31

标签: authentication kerberos ntlm

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

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

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

1 个答案:

答案 0 :(得分:1)

HTTP是无状态的。除非服务器告诉客户端它应该保持状态(通过服务器cookie),否则客户端绝不应该承担有关服务器意图的任何事情。

更重要的是,假设任何一方都可以始终执行Kerberos是错误的。该服务器最初表示希望进行协商,并且协商包含一组按优先顺序排列的可用协议(Kerberos,NTLM等)。当客户端具有KDC的视线时,它可以执行Kerberos,但是在任何/大多数情况下,它都可以执行NTLM,并且首选 Kerberos。

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