Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 春季SAML wso2_Java_Spring_Wso2_Saml_Wso2is - Fatal编程技术网

Java 春季SAML wso2

Java 春季SAML wso2,java,spring,wso2,saml,wso2is,Java,Spring,Wso2,Saml,Wso2is,我正在使用Spring saml示例和wso2 identity server中saml的基本配置来实现saml身份验证 到目前为止,当wso2服务器响应我的应用程序时,我在登录后遇到了这个错误 我不知道该注意什么 org.springframework.security.authentication.AuthenticationServiceException:确定元数据契约时出错 位于org.springframework.security.saml.SAMLProcessingFilter

我正在使用Spring saml示例和wso2 identity server中saml的基本配置来实现saml身份验证

到目前为止,当wso2服务器响应我的应用程序时,我在登录后遇到了这个错误

我不知道该注意什么

org.springframework.security.authentication.AuthenticationServiceException:确定元数据契约时出错 位于org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:91) 位于org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:211) 位于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:166) 位于org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 位于org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 位于org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 位于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:344) 位于org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) 位于org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1636) 位于org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:564) 位于org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 位于org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578) 位于org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) 位于org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1111) 位于org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:498) 位于org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 位于org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1045) 位于org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 位于org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:199) 位于org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109) 位于org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:98) 位于org.eclipse.jetty.server.server.handle(server.java:461) 位于org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:284) 位于org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:244) 位于org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:534) 位于org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) 位于org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) 运行(Thread.java:744) 原因:org.opensaml.saml2.metadata.provider.MetadataProviderException:未找到颁发者的元数据 位于org.springframework.security.saml.processor.SAMLProcessorImpl.retrieveMessage(SAMLProcessorImpl.java:108) 位于org.springframework.security.saml.processor.SAMLProcessorImpl.retrieveMessage(SAMLProcessorImpl.java:172) 位于org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:77) ... 36多


我认为SpringSAML示例正在寻找IDP元数据。它可能假设WSO2 Identity Server支持SAML元数据配置文件。但据我所知,Identity Server仍然不支持配置文件。但是,您可以在示例中手动配置IDP元数据。因此,请检查它。因为通常不需要所有IDP都支持此配置文件,所以必须有一些选项来忽略它并手动执行


此外,您还可以找到Identity Server的IDP元数据,该数据是从[this]博客手动创建的

我可以通过确保“Identity Provider Entity Id”与“IDP metadata entityID”匹配来解决这个问题。“Identity Provider Entity Id”设置可在WSO2 is(5.2.0版)管理控制台中的以下位置找到:Identity Providers/Resident Identity Provider/SAML2 Web SSO Configuration

“IdP metadata entityID”是EntityDescriptor标记的一个属性(根据)。我手动创建了WSO2 IdP元数据。以下是我的IdP元数据:

<EntityDescriptor entityID="localhost_wso2" validUntil="2023-09-23T06:57:15.396Z" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" >
<IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<KeyDescriptor use="signing">
 <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
   <ds:X509Data>
    <ds:X509Certificate>...</ds:X509Certificate>
   </ds:X509Data>
 </ds:KeyInfo>
</KeyDescriptor>
<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost:9443/samlsso" ResponseLocation="https://localhost:9443/samlsso"/>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost:9443/samlsso"/>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost:9443/samlsso"/>
</IDPSSODescriptor>
</EntityDescriptor>

...
我在Spring Saml配置中引用了上述IdP元数据,如下所示:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
<constructor-arg>
  <list>
    <!-- Example of classpath metadata with Extended Metadata -->
    <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
      <constructor-arg>
        <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
          <constructor-arg>
            <bean class="java.util.Timer"/>
          </constructor-arg>
          <constructor-arg>
            <bean class="org.opensaml.util.resource.ClasspathResource">
              <constructor-arg value="/metadata/wso2idp_metadata.xml"/>
            </bean>
          </constructor-arg>
          <property name="parserPool" ref="parserPool"/>
        </bean>
      </constructor-arg>
      <constructor-arg>
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
        </bean>
      </constructor-arg>
    </bean>
  </list>
</constructor-arg>
</bean>

是的,我正在使用元数据