我正在尝试使用 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 协商标头 - 这是真的吗?