我使用的是WebSphere 7.0.0.29,我在SPNEGO授权方面有问题--在第二个响应中返回HTTP 401,登录失败。
这是因为(我认为)它不能从客户端解析LtpaToken2 (LtpaToken2)。它抛出ArrayIndexOutOfBoundsException,而Base64用LtpaToken2解码cookie。在第二个客户端请求中,cookie中的这个LtpaToken2与第一个服务器响应( second )中的令牌相同(如我所见)。所以一切都会好起来的,但不幸的是,事实并非如此。
在我的第二个类似的环境(具有相同版本的WAS和相同的它的配置),一切都很好--但是它在不同的域,因此不同的域控制器。
虽然在这些环境下比较客户机与服务器之间通信的差异很繁琐,但我注意到在我的非工作环境中,LtpaToken2是较短的(!)而不是在工作时(如您在http_access.log中看到的)。LtpaToken也较短。但我不知道为什么。
也许是编码原因?或者不同的KDC配置?
我的客户是1.7.0_60-b19。
我正在粘贴WebSphere日志的片段。如果有什么有用的话请告诉我。
AppSrv01/logs/ffdc/server1_6150615_15.08.06_16.17.48.8658543509569228235853.txt:
[8/6/15 16:17:48:865 CEST] FFDC Exception:java.lang.ArrayIndexOutOfBoundsException SourceId:com.ibm.ws.security.web.WebAuthenticator.handleSSO ProbeId:1257 Reporter:com.ibm.ws.security.web.WebAuthenticator@64bd64bd
java.lang.ArrayIndexOutOfBoundsException
at com.ibm.ws.security.util.Base64Coder.base64Decode(Base64Coder.java:51)
at com.ibm.ws.security.util.Base64Coder.base64Decode(Base64Coder.java:109)
at com.ibm.ws.security.web.WebAuthenticator.validateCookie(WebAuthenticator.java:1225)
at com.ibm.ws.security.web.WebAuthenticator.handleSSO(WebAuthenticator.java:1139)
at com.ibm.ws.security.web.WebAuthenticator.authenticate(WebAuthenticator.java:3291)
at com.ibm.ws.security.web.WebAuthenticator.authenticate(WebAuthenticator.java:3143)
at com.ibm.ws.security.web.WebCollaborator.authorize(WebCollaborator.java:1235)
(...)http_access.log (我更改了地址):
ADDRESS_IP - - [06/Aug/2015:16:17:47 +0200] "POST ADDRESS HTTP/1.1" 200 - "-" "Java/1.7.0_60" "-"
ADDRESS_IP - - [06/Aug/2015:16:17:48 +0200] "POST ADDRESS HTTP/1.1" 401 148 "-" "Java/1.7.0_60" "null: LtpaToken:Tug3uTyc366i+dGtAAr/Hk1jm2zyUwO764AxDcjR//qzuxz+aTbQ2DwkygRbW9qJ5dKRIHhO+CmejTLNZTHzhSThiMDg59JF3JAASjCAQ0wVK29e/Ty4jlqx7CDPkONSf36iEfrxcjBtsrc+Sa1Y668XMWTW4Ri4G6HzJiOkvZYXrKgWjewP3qJRcEtn3GgSo/8V3qD20SAD3G94u4arGa5yL6l3838/Yw8gXwXiwEdB6hghlzHBsGLyyIloSFXIbljxB0b9GrI2kaU41D2+z+tWEk6x489SrhGNQrH7Gso LtpaToken2:jiF2h0WgMW2KlBS0Wf5wJvVziyZ8CR7HXvPedw/vVqLAbY6DLINVaCNS4UiEwDtJxVIVGIGP3XfqIY5DKOkTVxmeRRJBbEZCfqt0VYWLPWuh00glGNsDZDP5FH2+1HTBek/VhqQRl8K1vF3l5ZWUkamFQDVNlazMEG6GaamugenHDyyDwM7WPRTEzy1cFwRZvN7OAJqJy71DodO7ZSEqT4ad5SUdoc6AoOrEEXR2iEsiSj29+5SFOYe5OmeYZJeqsj2ac6bmL278pZsX1rx38LI9ncQUHg/rhCVHxuRrCrxy95Dtg+r7Z2S8zWfwMqSapqsApqlhKp+FJyVWqb3jnLjWUj+TeO3SOU0TYXiAoCznmyu6oRlq1FA4WVtaw34Pro52sv6FoX7ewPvFo6MpXwK9hiHuDMBJA+jJFSMr6gHa4d6/miQFtynLiLT+QyYl1+d9EJwZ16abq2TJCYR96g2Wl5PAUoR6iu4kMDghTQy3bKd1nfSF+Aink5c9WxDwZW3HUzXqtttcimGyrmi/+BE6oLj/oze3nsro/oFNVzL4/R6P10qEvD8bIYiOMQHgla1STjqJPXyZA+OrPYNGjDOVeOonBggmlbjmm7Nm9dk"工作中的http_access.log 示例是
ADDRESS_IP - - [06/Aug/2015:12:05:41 +0200] "POST ADDRESS HTTP/1.1" 200 - "-" "Java/1.7.0_60" "-"
ADDRESS_IP - - [06/Aug/2015:12:05:42 +0200] "POST ADDRESS HTTP/1.1" 200 - "-" "Java/1.7.0_60" "null: LtpaToken:nu4weYnVv5SyLBt94EdI/8hDq2Rcb/Qw9VRiMOmmtcVmsnLq6zId1iIgLHt0gciG2LlztUo9jgdG7sM3v2NwZ2IPiXamBJ3mNat1D9ZEcoTIqXfENnEN4k+Zr6SpN+PUxiMGQrSHZXWSJfkZ5fyUpxhvCyLBxdOJ8qIV1HRiFjzK/07J/0At4uI8Xj9okOnAjqB3snsRd2NYKArSZsiFbqC6mN7F9AR9dlzP10BrO1TOmIorfp8DSiJnr1sUZHlJjepE/vxlKdyaHWFsVQRrlkp3uL+oedT+ LtpaToken2:XVFROEeE5PBV5zLAwKVb2YFzZzKN2JJG7sJ2yFBMENl6hVewbiBjaAhdRI0vtsB18UHG24IQbKWUc6khnN6YqbHOCXocKQkgpSCMrvmi15TD7CT0a1k7dir4Y9/x9syOGLyeZ0/a134oB0Zc9neSntO8E1tb3SzvDnbsYRRaswGva+c2Ph5sbaXVMWUjou6IFHNcPguV2KmyrcWwH0b0xGuBfAbuN0L6ec1DNfprFLoQYZ3GaBDi7o+fRuhQBF1p1oU4o/PrtltbYd8GMTTp7SAdLCzaAULiiXRknz8i8qqVZhZvYwy5B0sRNCGpkYV4m/C8s8W54suvebuqJkKpupTJj4YurucKbQ36kxDT4sSe0TlZTBX5JjgFVYS6DCEZNthz3Kq3M+grgR5mYlol9IYdwkx6pYRd7k6RbaaDNzFTaoKwWdYFBV0hQLmoRxr/tzvdU/ob7gS0NzuM7pQDVV4ou9jYRRBVEp+NoIN9eqrXiSNhTHL1A/TFv8ZJq3iwph/kMltxWf4JOKxYEYZPLr5szwL56K81CwacW3lD+gidIBl7RBSwXzEslB8LpDbGIv1EVZWBTc3bRh4aVXuYQY5fV4TDazOdfxKusJBHCN7wNzBKK3c06mYXpCvZILgs"trace.log (我减少了私有数据和一些不重要的行):
[8/6/15 16:17:48:475 CEST] 00000036 TrustAssociat 2 com.ibm.ws.security.spnego.TrustAssociationInterceptorImpl negotiateValidateandEstablishTrust Authenticated user: ___USER___ Subject: Subject:
Principal: USER@DOMAIN
Private Credential:
(...)
[8/6/15 16:17:48:475 CEST] 00000036 TrustAssociat < com.ibm.ws.security.spnego.TrustAssociationInterceptorImpl negotiateValidateandEstablishTrust RETURN com.ibm.wsspi.security.tai.TAIResult@21c721c7
(...)
[8/6/15 16:17:48:878 CEST] 00000037 FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on /home/wasadm/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/ffdc/server1_6150615_15.08.06_16.17.48.8658543509569228235853.txt com.ibm.ws.security.web.WebAuthenticator.handleSSO 1257
[8/6/15 16:17:48:878 CEST] 00000037 TrustAssociat > com.ibm.ws.security.spnego.TrustAssociationInterceptorImpl getInstance ENTRY domainID: global
(...)
[8/6/15 16:17:48:887 CEST] 00000037 SpnegoHandler 2 com.ibm.ws.security.spnego.SpnegoHandler handleRequest No Authorization header found, sending **401** challenge to the client发布于 2015-08-21 09:21:58
在花了一些时间分析问题之后,我终于找到了问题的根源!:)
问题是我的客户代码。我是以错误的方式解析来自服务器(包含LTPA令牌)的响应,方法是将cookie拆分为"cookie.split("=")。
但是服务器响应已经包含了cookie值末尾的等于符号:"LtpaToken2=abc123...def=“。因此,我的代码删除了最后一个等价物sing (这非常重要:),并将错误的cookie值发送到服务器。
在修复我的代码之后,一切都正常:)
https://stackoverflow.com/questions/31860050
复制相似问题