标签: spnego

此 Kerberos/AD 设置是否可行?

我们有一个稍微复杂的 IDAM 设置:

在此处输入图片说明

即最终用户的机器和浏览器与父 AD 位于一个网络中,而我们基于 Jetty 的应用程序和它可以与之通信的 AD(本地 AD)位于另一个网络中。

两个 AD 之间存在双向信任。父网络中的浏览器在受信任站点中具有本地域。

Jetty 服务器的设置如下:

  • 它使用针对本地 AD 中的主体生成的密钥表文件
  • 它在本地 AD 中定义的用户下作为 Windows 服务运行
  • 领域、域-领域映射和 kdc 是针对本地 AD 的域定义的
  • 它使用 spnego - isInitiator 设置为 false;doNotPrompt 为真;storeKey 为真

问题是:

  • 作为测试,从本地网络内的浏览器(即链接到本地​​ AD)访问服务器有效- Kerberos 调试信息出现在日志中,我可以在 HTTP 流量中看到正确的 Kerberos 协商,并且用户自动登录. 杰出的。
  • 然而,从父网络内的浏览器访问服务器(这是我们的用户将如何做事)不起作用!浏览器返回 401 unauth,然后提示输入凭据,输入时显示空白屏幕。然后单击地址栏并按 Enter 会执行以下两项操作之一,具体取决于凭据是用于远程 AD 还是本地 AD:

    • 本地 AD 凭据然后正常登录,在日志中使用 Kerberos 从头开始​​(GET 请求、401 unauth 响应、Kerberos 标头请求等)
    • 远程AD证书不登录(GET请求,401 UNAUTH响应,看起来像一个NTLM头:Authorization: Negotiate <60 or so random chars>

无论哪种方式,它提示的事实都是错误的!

这些症状有解释吗?我们拥有的设置可以做我们想要的吗?

就上述描述而言可能是错误的:我提到的有关 Jetty …

active-directory jetty kerberos spnego

10
推荐指数
1
解决办法
593
查看次数

发送 NTLM 令牌而不是 Kerberos 票证

我正在尝试在 tomcat 服务器上使用 spnego 在我们的网络中实现 kerberos SSO。

我们在域上创建了一个帐户 (TCNKRBGINA) 用于预身份验证,并将其设置到 http 服务器:

Setspn -A HTTPS/testtech.etat-ge.ch TCNKRBGINA
Setspn -A HTTP/testtech.etat-ge.ch TCNKRBGINA
Run Code Online (Sandbox Code Playgroud)

但是客户端(IE 或 Firefox)发送的是 NTLM 令牌而不是 kerberos 票证。

问题似乎不在服务器端,因为当没有发送 Authorization 标头时,它会正确返回带有WWW-Authenticate: Negotiate标头的 401 状态代码。在服务器有机会联系域控制器之前,客户端发送的下一个请求包含 NTLM 令牌。

windows-server-2008 kerberos spnego

2
推荐指数
1
解决办法
5735
查看次数