我正在尝试使用Windows客户端和JBoss实现SSO。拥有我的开发PC,JBoss在Windows 7上运行,在开发服务器上运行,它运行在(Red Hat)Linux上。
有一个JBoss Negotiation Toolkit,可以让我检查Negiation标头是否正确到达。
只要我使用BasicNegotiation
在我自己的PC上运行JBoss,localhost
测试就可以正常工作。发送的标头是
Authorization: Negotiate YHgGBisGAQUFAqBuMGygMDAuBgorBgEEAYI3AgIKB...
(加上更多字节)
测试的回答是
谈判工具包 基本谈判 WWW-Authenticate - 谈判YHgGBisGAQUFAqBuMGygMDAuBgorBgEEAYI3AgIK ......
NegTokenInit 消息Oid - SPNEGO 机械类型 - {NTLM} {Kerberos V5 Legacy} {Kerberos V5} {1.3.6.1.4.1.311.2.2.30} 需求标志 - 机械令牌-TlRMTVNTUAABAAAAl7II4gQABAAyAAAACgAKACgAAAAGAbAdAAAAD0lQSUVWMTAwMjVJUElF 机械清单麦克风 -
但是在Linux服务器上,同样的测试不起作用。基本原因(我猜)是标题看起来不同:
Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbAdAAAADw==
然后JBoss Negotiation Toolkit回退到NTML身份验证,这是我不想要的,并且在webapp的输出中显示为错误。
谈判工具包 NTLM谈判 WWW-Authenticate - 谈判TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAADA ==
NTLM - Negotiate_Message 警告,这是NTLM,只支持SPNEGO! 协商标志 - (encryption56Bit)(explicitKeyExchange)(sessionKeyExchange128Bit) negotiateVersion)(NTLM2)(alwaysSign)(NTLM)(lmKey)(符号)(requestTarget)(OEM)(Unicode)的 域名= null - {length = 0} {maxLength = 0} {offset = 0} 工作站名称= null - {length = 0} {maxLength = 0} {offset = 0} 版本 - ?
我将Internet Explorer和Firefox配置为发送Negotiation标头,它们都与Linux服务器一起失败。
我做错了什么?
顺便说一句:我在某处看到Windows总是在本地计算机上发送Kerberos Negotiation标头 - 这是真的吗?
答案 0 :(得分:2)
我的Internet Explorer用于发送NTLM标头而不是kerberos标头。原因:Windows在其保险箱中为同一主机保存了密码。
在保险箱中输入的用户和密码与我的Windows帐户不同,但它没有任何区别。只有服务器名称(甚至不是完全限定的)才是相关的。
坦克到http://www.msxfaq.de/verschiedenes/kerberosbrowser.htm进行解释(德语)。
答案 1 :(得分:1)
感谢您的回答。在我们的例子中,问题是我们有两个Windows域。我试图使用域B中的Windows浏览器访问域A中的Linux服务器。显然,这不起作用...
答案 2 :(得分:0)
浏览器发送NTLM类型1令牌,因为Kerberos失败,因为您的AD / DNS设置不正确。这种行为是正确的。修复您的DNS设置。
答案 3 :(得分: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
,但我忘了注册后者。因此浏览器从AD收到KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN
错误,并且没有发送票证。
此致 安德拉什