生成 SP 元数据时出现意外的堆栈跟踪表单 Spring-Security-SAML?

Posted

技术标签:

【中文标题】生成 SP 元数据时出现意外的堆栈跟踪表单 Spring-Security-SAML?【英文标题】:Unexpected stack trace form Spring-Security-SAML when generating SP metadata? 【发布时间】:2014-12-20 08:52:02 【问题描述】:

我正在尝试将 spring-security-saml 与现有应用程序集成,以允许该应用程序充当服务提供者。

很遗憾,我似乎无法让元数据过滤器正常工作。 webapp 启动时没有任何问题,但是当我点击 $contextPath/saml/metadata 时,我在日志中收到以下堆栈跟踪。

2014-10-24 13:52:38,779 54025 [1045652139@qtp-718389251-8] WARN  org.mortbay.log - /sf/saml/metadata/
org.opensaml.saml2.metadata.provider.MetadataProviderException: No hosted service provider is configured and no alias was selected
        at org.springframework.security.saml.context.SAMLContextProviderImpl.populateLocalEntity(SAMLContextProviderImpl.java:311) ~[spring-security-saml2-core
-1.0.0.RELEASE.jar:1.0.0.RELEASE]
        at org.springframework.security.saml.context.SAMLContextProviderImpl.populateLocalContext(SAMLContextProviderImpl.java:216) ~[spring-security-saml2-cor
e-1.0.0.RELEASE.jar:1.0.0.RELEASE]
        at org.springframework.security.saml.context.SAMLContextProviderImpl.getLocalEntity(SAMLContextProviderImpl.java:107) ~[spring-security-saml2-core-1.0.
0.RELEASE.jar:1.0.0.RELEASE]
        at org.springframework.security.saml.metadata.MetadataDisplayFilter.processMetadataDisplay(MetadataDisplayFilter.java:114) ~[spring-security-saml2-core-1.0.0.RELEASE.jar:1.0.0.RELEASE]
        at org.springframework.security.saml.metadata.MetadataDisplayFilter.doFilter(MetadataDisplayFilter.java:88) ~[spring-security-saml2-core-1.0.0.RELEASE.jar:1.0.0.RELEASE]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) ~[spring-security-web-3.2.3.RELEASE.jar:3.2.3.RELEASE]
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) ~[spring-security-web-3.2.3.RELEASE.jar:3.2.3.RELEASE]
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166) ~[spring-security-web-3.2.3.RELEASE.jar:3.2.3.RELEASE]

我的元数据配置如下:

  <bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
    <constructor-arg ref="metadataGenerator"/>
  </bean>

  <bean id="metadataGenerator" class="org.springframework.security.saml.metadata.MetadataGenerator">
    <!--<property name="entityBaseURL" value="$env.shibboleth.entityBaseUrl"/>-->
    <property name="bindingsSSO">
        <list>
            <value>redirect</value>
            <value>artifact</value>
        </list>
    </property>
    <property name="entityId" value="$env.shibboleth.entityId"/>
    <prop
  </bean>

我们目前正在使用:

春季版:4.0.4.RELEASE spring 安全版本:3.2.3.RELEASE spring-security-saml2 版本:1.0.0.RELEASE

在这一点上,我很茫然,因为我们没有尝试进行多租户设置,这是唯一详细提到 alias 的地方,并且来自我可以看到,metadataGenerator 定义了一个服务提供者?

【问题讨论】:

【参考方案1】:

metadataGeneratorFilter 需要在调用MetadataDisplayFilter 之前执行,请确保在您的&lt;security:http&gt; 元素中包含以下声明:

<security:custom-filter before="FIRST" ref="metadataGeneratorFilter"/>

此外,entityId 的值似乎表明您对 IDP(Shibboleth)和 SP(Spring SAML 应用程序)使用相同的 entityId。确保两个实体的值唯一

【讨论】:

您好弗拉基米尔,您是否理解为什么上面与您的 xml 等效的 JavaConfig 不会生成元数据? http.addFilterBefore(metadataGeneratorFilter(), ChannelProcessingFilter.class).addFilterAfter(samlFilter(), BasicAuthenticationFilter.class); 非常感谢,问候 SAMLContextProviderImpl:244 将收到此问题中所述的空 entityId。

以上是关于生成 SP 元数据时出现意外的堆栈跟踪表单 Spring-Security-SAML?的主要内容,如果未能解决你的问题,请参考以下文章

使用新的 Xamarin 表单构建时出现“XamlCTask”任务意外失败”错误

Fuelphp ORM添加到模型属性时出现意外结果

使用 Spring Security 时出现意外的 403 错误

cassandra datastax 编写生成的代码时出现意外错误:java.lang.NullPointerException

Expecto FsCheck在生成字符串时出现堆栈溢出异常

当 TFS 为构建克隆 git 存储库时出现 AppDomainUnloadedException