Spring SAML与WSO2 Identity Server集成,未重新协调SAML消息ID

用户名

我已经采用了与开放源代码登录页面SSO一起使用的Spring SAML示例(请参阅本指南的4.2节),并尝试添加支持以将WSO2 Identity Server用作附加的IDP服务。为此,我通过为IS添加元数据xml文件来更改spring SAML示例项目,并将IS元数据的条目添加到securityContext.xml。

现在,在运行spring应用程序时,我会看到一个使用IS登录的选项,当我重定向到WSO2时,我可以成功登录。但是,spring应用程序在IS SAML响应上引发了一个异常,该异常与InResponseToField不匹配。

2015-01-05 09:54:12,845 line="org.springframework.security.saml.log.SAMLDefaultLogger.log(SAMLDefaultLogger.java:127)" thread="http-nio-8080-exec-4" class="org.springframework.security.saml.log.SAMLDefaultLogger" AuthNResponse;FAILURE;0:0:0:0:0:0:0:1;com:vdenotaris:spring:sp;localhost;;;org.opensaml.common.SAMLException: InResponseToField of the Response doesn't correspond to sent message ae2dab0fb8b0g8e49971b91a73e91i

通过调试应用程序,似乎响应消息未被识别为与请求消息属于同一会话。我说从这2条日志消息中,发送AuthRequest时记录第一条消息,而收到响应时记录第二条消息:

2015-01-05 09:53:20,867 line="org.springframework.security.saml.storage.HttpSessionStorage.storeMessage(HttpSessionStorage.java:93)" thread="http-nio-8080-exec-1" class="org.springframework.security.saml.storage.HttpSessionStorage" Storing message ae2dab0fb8b0g8e49971b91a73e91i to session 26D3B7D9E33F26A7A5092BF6909B9D13
...
2015-01-05 09:54:10,731 line="org.springframework.security.saml.storage.HttpSessionStorage.retrieveMessage(HttpSessionStorage.java:117)" thread="http-nio-8080-exec-4" class="org.springframework.security.saml.storage.HttpSessionStorage" Message ae2dab0fb8b0g8e49971b91a73e91i not found in session BBF256F284F55D774E6997600E9B3388

IS SAML响应为:

<?xml version="1.0" encoding="UTF-8"?><saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="http://localhost:8080/saml/SSO" ID="adlbklpnldoanfphalcaahhacooinnldcejjjioe" InResponseTo="ae2dab0fb8b0g8e49971b91a73e91i" IssueInstant="2015-01-05T09:53:38.063Z" Version="2.0">
   <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">localhost</saml2:Issuer>
   <saml2p:Status>
      <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
   </saml2p:Status>
   <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="ebhfkdhlgbhclcklefjigfddoikklhjlanlbolel" IssueInstant="2015-01-05T09:53:38.065Z" Version="2.0">
      <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">localhost</saml2:Issuer>
      <saml2:Subject>
         <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">smit005</saml2:NameID>
     <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <saml2:SubjectConfirmationData InResponseTo="ae2dab0fb8b0g8e49971b91a73e91i" NotOnOrAfter="2015-01-05T09:58:38.063Z" Recipient="http://localhost:8080/saml/SSO"/>
     </saml2:SubjectConfirmation>
  </saml2:Subject>
  <saml2:Conditions NotBefore="2015-01-05T09:53:38.065Z" NotOnOrAfter="2015-01-05T09:58:38.063Z">
     <saml2:AudienceRestriction>
        <saml2:Audience>com:vdenotaris:spring:sp</saml2:Audience>
     </saml2:AudienceRestriction>
  </saml2:Conditions>
  <saml2:AuthnStatement AuthnInstant="2015-01-05T09:53:38.068Z" SessionIndex="406d4530-6fcf-4edf-b876-a68de4b4ea79">
     <saml2:AuthnContext>
            <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml2:AuthnContextClassRef>
     </saml2:AuthnContext>
  </saml2:AuthnStatement>
  <saml2:AttributeStatement/>
   </saml2:Assertion>
</saml2p:Response>

作为参考,我附上了为WSO2 IS添加的元数据xml文件(我必须给它提供一个'localhost'的实体ID,因为这是WSO2 IS坚持要返回的内容(默认情况下使用主机名))。

<?xml version="1.0" encoding="UTF-8"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
                     entityID="localhost"
                     validUntil="2023-09-23T06:57:15.396Z">
   <md:IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" >
    <md:KeyDescriptor use="signing">
        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:X509Data>
                <ds:X509Certificate>MIICNTCCAZ6gAwIBAgIES343gjANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJVUzELMAkGA1UE
                    CAwCQ0ExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxDTALBgNVBAoMBFdTTzIxEjAQBgNVBAMMCWxv
                    Y2FsaG9zdDAeFw0xMDAyMTkwNzAyMjZaFw0zNTAyMTMwNzAyMjZaMFUxCzAJBgNVBAYTAlVTMQsw
                    CQYDVQQIDAJDQTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzENMAsGA1UECgwEV1NPMjESMBAGA1UE
                    AwwJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUp/oV1vWc8/TkQSiAvTou
                    sMzOM4asB2iltr2QKozni5aVFu818MpOLZIr8LMnTzWllJvvaA5RAAdpbECb+48FjbBe0hseUdN5
                    HpwvnH/DW8ZccGvk53I6Orq7hLCv1ZHtuOCokghz/ATrhyPq+QktMfXnRS4HrKGJTzxaCcU7OQID
                    AQABoxIwEDAOBgNVHQ8BAf8EBAMCBPAwDQYJKoZIhvcNAQEFBQADgYEAW5wPR7cr1LAdq+IrR44i
                    QlRG5ITCZXY9hI0PygLP2rHANh+PYfTmxbuOnykNGyhM6FjFLbW2uZHQTY1jMrPprjOrmyK5sjJR
                    O4d1DeGHT/YnIjs9JogRKv4XHECwLtIVdAbIdWHEtVZJyMSktcyysFcvuhPQK8Qc/E/Wq8uHSCo=</ds:X509Certificate>
                </ds:X509Data>
            </ds:KeyInfo>
        </md:KeyDescriptor>
        <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost:9443/samlsso" ResponseLocation="https://localhost:9443/samlsso"/>
        <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost:9443/samlsso"/>
        <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost:9443/samlsso"/>
       <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
       <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
       <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
       <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>
   </md:IDPSSODescriptor>
</md:EntityDescriptor>

根据要求,我已将浏览器HTTP消息的日志保存在dropbox上

弗拉基米尔·谢弗

Spring SAML和IDP WSO2服务器都部署在同一域localhost上这是发生了什么:

  • 春天SAML创建一个HTTP会话(JSESSIONID - 82F3ECD1A1E4F9B7DB0134F3129267A5和初始化单点登录
  • WSO2接受请求并验证用户身份,但创建自己的会话(JSESSIONID- C34B21931C53080487B5B9BA6EB490D2),并将用户重定向回Spring SAML
  • 运行Spring SAML的容器收到带有JSESSIONIDC34B21931C53080487B5B9BA6EB490D2的cookie ,但是由于无法识别此类会话,因此创建了一个新会话(E712A8422009613F6FD3901327690726
  • Spring SAML尝试根据原始请求验证收到的SAML消息,但由于原始会话现在已消失而无法找到

解决此问题的最简单方法是更改​​Spring SAML或WSO2的会话cookie名称。您还可以将应用程序部署在不同的域上(例如,通过在hosts文件中为localhost赋予别名-/etc/hosts%systemroot%\system32\drivers\etc\hosts

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Spring Security + WSO2 Identity Server的OAuth 2.0

使用WSO2 Identity Server管理外部自定义权限吗?

WSO2 Identity Server 5.1.0在SAML响应中未返回用户声明

在没有浏览器的情况下针对WSO2 Identity Server进行身份验证,并获取SAML2断言消息

WSO2 Identity Server的用户和租户

WSO2 Identity Server用户身份验证的HTTP请求

有什么方法可以在WSO2 Identity Server中加密用户名?

WSO2 Identity Server 5.9.0 oAuth2配置类型

WSO2 Identity Server与ADFS Server集成时抛出NullpointerException

使用WSO2 Identity Server和WSO2 API Manager保护后端

WSO2 Identity Server升级

为WSO2 Identity Server部署自定义密码策略文件

WSO2 Identity Server 5中的SAML SSO注销失败

基于SAML / XACML的WSO2 Identity Server访问控制

WSO2 Identity Server在用户存储,策略管理等中看不到选项

WSO2 Identity Server中的SCIM服务提供商

WSO2 Identity Server中的SAML请求-响应处理

使用WSO2 Identity Server的SAML2.0 SSO?

为什么WSO2 IS SAML2SSOAuthenticationService返回false?(SAML2 SSO)

集成bonita和wso2 Identity Server

WSO2 Identity Server将用户设置为“非活动”

WSO2 Identity Server未返回带有OAuth / OpenID的请求的声明

WSO2 IS 5.1.0,按照SAML声明发送会话信息

使用WSO2 Identity Server 5.1进行单点登录

WSO2 API Manager使用Identity Server存储访问

wso2 Identity Server-无法删除租户

用于会话管理的 WSO2 Identity Server 5.0.0 Api

wso2 集成 Spring Boot 应用程序

WSO2 sh wso2server.sh -Dmigrate -Dcomponent=identity 没有运行迁移脚本