集成 Windows 身份验证在绑定到 AD 网络的 PC 上不起作用

集成 Windows 身份验证在绑定到 AD 网络的 PC 上不起作用

背景:

  1. 运行 LAMP 堆栈的 Web 服务器
  2. Web 服务器已通过 VPN 隧道连接至总部的 AD 网络
  3. 全球多个 AD 网络,具有 VPN 隧道和与总部网络的信任关系
  4. 在 Web 服务器上配置 Kerberos 身份验证,并使用 keytab 文件在所有网络上工作
  5. 我是网站管理员,但无权访问任何 AD 网络配置

我们遇到了一个 AD 网络问题,当用于访问我们的 Web 服务器的 PC 绑定到相关 AD 时,该问题仅通过 IE 或 Chrome 出现。没有传递令牌,并且服务器日志中没有与令牌协商相关的条目。如果我们使用 Firefox 并启用 network.negotiate-auth 选项,则用户可以毫无问题地登录,但是使用 IE 时会收到需要授权的错误。该网站位于 Intranet 区域,并且已检查 IWA(这由 GPO 控制)

如果用户尝试从其 AD 之外使用 IE 或 Chrome 访问网站,他们会看到预期的身份验证登录提示,然后令牌会被正确发送。

我已经与网络管理员进行了交流,他们确信 AD 不需要任何特殊配置来确保 Kerberos 身份验证有效,但如果不是 AD 配置本身的问题,我不明白为什么身份验证对其他六个 AD 网络有效,而对这个网络却失败。

我是不是漏掉了什么?什么原因导致无法协商令牌?

[注:这并不紧急,而且我现在要离开办公室了,周一我会回答任何有关更多详细信息的请求]

答案1

问题在于,在 AD 网络内部时,系统会自动发送令牌并尝试协商,但由于生成密钥表时使用了加密,因此总是失败。

最初我们使用-加密 DES-CBC-CRC但一旦我们改用-加密 RC4-HMAC-NT问题就解决了。

答案2

虽然我不是这方面的专家,但我倾向于认为,如果没有交换协商令牌,问题可能在于应用程序没有使用 keytab 关联的用户名注册其 SPN。

如果是这种情况,在 AD 服务器上运行以下命令可能会修复此问题:

setspn –a HTTP/(你的主机名) (keytabusername)

例如 setspn -a HTTP/intranetappsrv.mycompany.com jbossaccount

相关内容