我已经在我们的 apache-active 目录环境中通过 mod_auth_kerb 实现了 SSO,它按预期工作。然而,以下知识困扰着我:
我从两台客户端机器请求了一个受 Kerberos 保护的页面,一个用户属于 Kerberos-setup 域,另一个用户属于其他某个域。然后我比较了两台机器上的 HTTP 数据包。在两台机器上,发送对 Kerberos 保护页面的请求后,服务器会使用以下 HTTP 数据包进行响应:
HTTP/1.1 401 Authorization Required Date: Wed, 05 Sep 2012 14:25:20 GMT 服务器:Apache WWW-Authenticate : 协商 WWW-Authenticate: Basic realm="Kerberos Login" Content-Length: 60 Connection: close Content-Type: text/html; 字符集=iso-8859-1
但是,在来自服务器的上述响应之后,属于 Kerberos-setup 域的客户端计算机浏览器以WWW-Authenticate : Negotiate 'token'响应,而其他客户端浏览器(属于其他某个域的用户)根本不响应.
现在我的理解是,属于另一个域的客户端也应该用它自己的 TGT+Session 密钥令牌进行响应,活动目录应该拒绝它。但是为什么这个客户端根本不响应服务器的WWW-Authenticate : Negotiate挑战超出了我的逻辑。更令人困惑的是,服务器的 HTTP 响应(如上所示)不包含有关它链接到的域的任何信息。
那么,属于正确域的客户端浏览器基于什么决定它必须响应服务器的WWW-Authenticate : Negotiate challenge,以及属于某个其他域的客户端基于什么决定不响应相同的请求?
注意:两台客户端机器都有 Windows 7,活动目录是 Windows 2008 服务器。
我正在尝试了解 mod_auth_kerb 的 SSO 实现,而这一特定知识是其中的关键。