5

我正在尝试使用 Windows 客户端和 JBoss 实现 SSO。拥有我的开发 PC,JBoss 在 Windows 7 上运行,在开发服务器上,它在 (Red Hat) Linux 上运行。

有一个JBoss Negotiation Toolkit允许我检查 Negiation 标头是否正确到达。

BasicNegotiation只要我在自己的 PC 上运行 JBoss,测试就可以正常工作,使用localhost. 发送的标头是

Authorization: Negotiate YHgGBisGAQUFAqBuMGygMDAuBgorBgEEAYI3AgIKB...(加上更多字节)

测试的响应是

Negotiation Toolkit Basic Negotiation WWW-Authenticate - Negotiate YHgGBisGAQUFAqBuMGygMDAuBgorBgEEAYI3AgIK...

NegTokenInit Message Oid - SPNEGO Mech Types - {NTLM} {Kerberos V5 Legacy} {Kerberos V5} {1.3.6.1.4.1.311.2.2.30} Req Flags - Mech Token -TlRMTVNTUAABAAAAl7II4gQABAAyAAAACgAKACgAAAAGAbAdAAAAD0lQSUVWMTAwMjVJUElF Mech List Mic -

但在 Linux 服务器上,同样的测试不起作用。基本原因(我猜)是标题看起来不同:

Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbAdAAAADw==

然后 JBoss Negotiation Toolkit 回退到 NTML 身份验证,这是我不想要的,并且在 webapp 的输出中显示为错误。

协商工具包 NTLM 协商 WWW-Authenticate - 协商 TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbAdAAAADw==

NTLM - Negotiate_Message 警告,这是 NTLM,仅支持 SPNEGO!协商标志 - (encryption56Bit)(explicitKeyExchange)(sessionKeyExchange128Bit)协商版本)(ntlm2)(alwaysSign)(ntlm)(lmKey)(sign)(requestTarget)(oem)(unicode) 域名 = null - {length=0}{maxLength =0}{offset=0} 工作站名称 = null - {length=0}{maxLength=0}{offset=0} 版本 - ?

我将 Internet Explorer 和 Firefox 都配置为发送协商标头,但它们都因 Linux 服务器而失败。

我究竟做错了什么?

顺便说一句:我在某处读到 Windows 总是在本地机器上发送 Kerberos 协商标头 - 这是真的吗?

4

4 回答 4

2

感谢您的回答。在我们的例子中,问题是我们有两个 Windows 域。我试图使用域 B 中的 Windows 浏览器访问域 A 中的 Linux 服务器。显然,这不起作用......

于 2013-07-22T10:16:02.180 回答
2

我的 Internet Explorer 曾经发送 NTLM 标头而不是 kerberos 标头。原因:Windows 在其保险箱中保存了同一主机的密码。

保险箱中输入的用户名和密码与我的 Windows 帐户不同,但没有区别。只有服务器名称(甚至不是完全限定的)是相关的。

坦克到http://www.msxfaq.de/verschiedenes/kerberosbrowser.htm进行解释(德语)。

窗户保险箱

于 2015-08-26T11:47:22.877 回答
0

浏览器发送 NTLM 类型 1 令牌,因为 Kerberos 失败,因为您的 AD/DNS 设置不正确。这种行为是正确的。修复您的 DNS 设置。

于 2013-06-30T14:16:03.780 回答
0

以下是可能出错的一个很好的总结:https ://www.pingidentity.com/support/answers/index.cfm/why-am-i-not-getting-a-kerberos-ticket?id=90640000000CaWgAAK

我总是做一个wireshark捕获来查看浏览器和服务之间的通信,以及浏览器和AD之间的通信。在您的情况下,问题可能出在后者。例如,一旦我将http://myGoodLookingDNSAlias地址用于服务,该服务被解析为http://realBadLookingServerName,但我忘记注册后者。所以浏览器KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN从 AD 得到一个错误,并没有发送票证。

问候, 安德拉斯

于 2013-07-01T07:19:30.770 回答