SP 中的多个 AssertionConsumerService 具有不同的第二级域

问题描述

我正在使用 spring security saml 扩展实现多租户应用程序。

我为每个租户都有一个服务提供商 (SP)。 所有 SP 都在使用 SP 特定的二级域公开的同一台服务器上运行:

  • sp1.myapp.com/myapi/1/
  • sp1.myapp.com/myapi/2/

在每个 SP 元数据文件中,我都配置了特定于租户的 AssertionConsumerService。

当我测试 SSO 登录时,当它得到身份提供者 (IDP) 的响应时,我在 SP 端得到一个 KO。 在日志方面,我只看到:

ERROR [BaseSAMLMessageDecoder] SAML message intended destination endpoint 'https://sp1.myapp.com/myapi/saml/SSO' did not match the recipient endpoint 'https://default.myapp.com/myapi/saml/SSO'

其中“https://default.myapp.com/myapi/saml/SSO”是设置为负载均衡器上下文提供程序serverName的 URL:

<bean id="lbContextProvider" class="org.springframework.security.saml.context.SAMLContextProviderLB" init-method="afterPropertiesSet">
    <property name="Metadata"    ref="Metadata" />
    <property name="keyManager"  ref="keyManager" />
    <property name="scheme"      value="https" />
    <property name="serverName"  value="default.myapp.com" />
    <property name="contextpath" value="/myapi" />
    <property name="serverPort"  value="443" />
    <property name="includeServerPortInRequestURL" value="true" />
</bean>

问题

docs.spring.io/spring-security-saml 中,我看到了

服务提供者现在可以定义多个具有相同绑定的断言消费者端点

  • 我该如何配置?
  • 它是否与负载平衡器上下文提供程序冲突?
  • 我能否提供多个具有不同二级域的 AssertionConsumerService 而不会重现此冲突?

我已经测试过了:

<bean id="successRedirectHandler" class="org.MySamlAuthenticationSuccessHandler" 
                            init-method="afterPropertiesSet">
    <property name="contextpath" value="/myapi" />
    <property name="defaultTargetUrl" value="https://default.myapp.com/myapi/saml/SSO"/>
    <property name="requireProxyWrapping" value="false"/>
</bean>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...