WSO2 Identity Server 4.6.0无法处理以下SAML(SLO)注销请求:
<saml2p:LogoutRequest Destination="https://idp:9443/samlsso"
ID="_f2a42cceb9e680b8d91fafd44d05391d27afa997"
IssueInstant="2014-03-26T18:18:10.842Z"
Version="2.0"
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
>
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">sp</saml2:Issuer>
<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
>REALM/email@example.com</saml2:NameID>
</saml2p:LogoutRequest>
它给出了:
[2014-03-26 19:18:11,009] ERROR - Error Processing the Logout Request {org.wso2.carbon.identity.sso.saml.processors.LogoutRequestProcessor}
java.lang.IndexOutOfBoundsException: Index: 0
at java.util.Collections$EmptyList.get(Collections.java:3212)
at org.opensaml.xml.util.LazyList.get(LazyList.java:89)
[...]
Caused by: java.lang.IndexOutOfBoundsException: Index: 0
at java.util.Collections$EmptyList.get(Collections.java:3212)
at org.opensaml.xml.util.LazyList.get(LazyList.java:89)
at org.opensaml.xml.util.XMLObjectChildrenList.get(XMLObjectChildrenList.java:96)
at org.opensaml.xml.util.XMLObjectChildrenList.get(XMLObjectChildrenList.java:32)
at org.wso2.carbon.identity.sso.saml.processors.LogoutRequestProcessor.process(LogoutRequestProcessor.java:114)
... 38 more
知道为什么,以及如何修复?
更新:
我认为它与SessionIndex的元素有关,但根据http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf SAML文档,它在LogoutRequest中是可选的。
答案 0 :(得分:0)
我不明白上述错误信息,但也许你走在正确的轨道上。
在你发布的文件中也说sp必须包含一个SessionIndex(它说“至少有一个”),见第1302行
毕竟,如果你不包括会话索引,idp应该如何知道要终止的会话以及应该通知哪些会话参与者注销?
答案 1 :(得分:0)
是的,SessionIndex是必须的。
SessionIndex - 这是会话标识符,用于标识给定用户的IDP和SP的用户会话。
请参阅How SAML2 Single Logout Works了解更多详情。