【问题标题】:Spring Security SAML with OKTA带有 OKTA 的 Spring Security SAML
【发布时间】:2017-05-23 06:52:00
【问题描述】:

我尝试使用 OKTA 为 Spring 应用程序设置 SAML,我关注 http://developer.okta.com/code/java/spring_security_saml.html

完成教程中的所有步骤后,我收到以下错误

严重:servlet [jsp] 的 Servlet.service() 在路径 [/spring-security-saml2-sample] 的上下文中抛出异常 [org.opensaml.saml2.metadata.provider.MetadataProviderException:请没有配置 IDP使用至少一个 IDP 更新包含的元数据] 有根本原因 org.opensaml.saml2.metadata.provider.MetadataProviderException:未配置 IDP,请使用至少一个 IDP 更新包含的元数据 在 org.springframework.security.saml.metadata.MetadataManager.getDefaultIDP(MetadataManager.java:781) 在 org.springframework.security.saml.context.SAMLContextProviderImpl.populatePeerEntityId(SAMLContextProviderImpl.java:157) 在 org.springframework.security.saml.context.SAMLContextProviderImpl.getLocalAndPeerEntity(SAMLContextProviderImpl.java:127) 在 org.springframework.security.saml.SAMLEntryPoint.commence(SAMLEntryPoint.java:146) 在 org.springframework.security.web.access.ExceptionTranslationFilter.sendStartAuthentication(ExceptionTranslationFilter.java:186) 在 org.springframework.security.web.access.ExceptionTranslationFilter.handleSpringSecurityException(ExceptionTranslationFilter.java:168) 在 org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:131) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:186) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:87) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Unknown Source)

可能出了什么问题?

【问题讨论】:

    标签: okta


    【解决方案1】:

    您看到此错误是因为在 securityContext.xml 文件中未正确设置 IDP 元数据 url(如步骤 2 中所述 http://developer.okta.com/code/java/spring_security_saml.html#configuring-spring-security-saml-to-work-with-okta)。

    请从您的 SAML 应用的登录选项卡中复制 IDP 元数据网址。

    在securityContext.xml中的以下部分输入它

        <constructor-arg>
    
            <list>
    
                <bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
    
                      <!-- URL containing the metadata -->
                      <constructor-arg>
    
                        <!-- This URL should look something like this: https://example.okta.com/app/abc0defghijK1lmN23o4/sso/saml/metadata -->
    
                        <value type="java.lang.String">{{IDP_Metadata_Url}}</value>
    
                      </constructor-arg>
    
                      <!-- Timeout for metadata loading in ms -->
    
                      <constructor-arg>
    
                        <value type="int">5000</value>
    
                      </constructor-arg>
    
                      <property name="parserPool" ref="parserPool"/>
    
                    </bean>
    
            </list>
    
        </constructor-arg>
    
    </bean>
    

    【讨论】:

    • 我已经这样做了。钥匙有问题吗?
    • 您能否确保 IDP 元数据配置在 class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider" 下?因为异常显然与 IDP 元数据设置不正确有关。
    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 2018-07-12
    • 2016-12-05
    • 2018-02-26
    • 2017-04-06
    • 2013-03-02
    • 1970-01-01
    • 2015-02-27
    相关资源
    最近更新 更多