温馨提示:本文翻译自stackoverflow.com,查看原文请点击:spring boot - WSO2 throws EmptyStackException while trying federated login
spring-boot wso2 wso2carbon wso2is

spring boot - WSO2在尝试联合登录时抛出EmptyStackException

发布于 2020-04-24 10:59:19

我有两台WSO2身份服务器在同一台计算机上运行,​​一个是身份服务器,另一个在联合身份服务器上,用于复制联合登录,当我从客户端spring boot applicaiton访问时,身份服务器抛出以下异常。需要一些建议。

错误{org.apache.catalina.core.ContainerBase。[Catalina]。[localhost]。[/ oauth2]。[OAuth2Endpoints]}-路径为[/ oauth2]的上下文中Servlet [OAuth2Endpoints]的Servlet.service() java.util.Stack.peek上的java.util.EmptyStackException(Stack.java:102)

我的WSO2版本是:5.9.0

详细日志:

错误{org.apache.catalina.core.ContainerBase。[Catalina]。[localhost]。[/ oauth2]。[OAuth2Endpoints]}-路径为[/ oauth2]的上下文中Servlet [OAuth2Endpoints]的Servlet.service() org.wso2.carbon.context.internal.CarbonContextDataHolder.endTenantFlow(在java.util.Stack.peek(Stack.java:102)在java.util.Stack.pop(Stack.java:84)处的java.util.EmptyStackException在org.wso2.carbon.context.PrivilegedCarbonContext.endTenantFlow(PrivilegedCarbonContext.java:75)处的CarbonContextDataHolder.java:1295)在org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint.authorize(OAuth2AuthzEndpoint.java:250)处在sun.reflect.GeneratedMethodAccessor246.invoke(Unknown Source)处在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在org.apache.cxf.service.invoker的java.lang.reflect.Method.invoke(Method.java:483)在org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:103)上org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:193)上的.AbstractInvoker.invoke(AbstractInvoker.java:96) org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)上的org.apache.cxf.interceptor.ServiceInvokerInterceptor.java $ 1.run(ServiceInvokerInterceptor.java:59)at org.apache.cxf.phase.PhaseInterceptorChain (PhaseInterceptorChain.java:308)在org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)at org.apache.cxf org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)上的org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke上的.transport.servlet.ServletController.invoke(ServletController.java:208) (CXFNonSpringServlet.java:216)在org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:301)在org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:225)在org.apache.cxf.transport.servlet上的javax.servlet.http.HttpServlet.service(HttpServlet.java:634)。org.org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)的AbstractHTTPServlet.service(AbstractHTTPServlet.java:276) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)处的.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166)在org.wso2.carbon.webapp.mgt.filter.AuthorizationHeaderFilter.doFilter(AuthorizationHeaderFilter.java:85)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)在org.apache.catalina.core.ApplicationFilterChain。org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)上的org.wso2.carbon.ui.filters.cache.ContentTypeBasedCachePreventionFilter.doFilter(ContentTypeBasedCachePreventionFilter.java:53)上的doFilter(ApplicationFilterChain.java:166)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)在org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:126)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193)(位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)位于org.apache。 catalina.core。org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)的org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)的StandardContextValve.invoke(StandardContextValve.java:96) org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:80)上的.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)在org.wso2.carbon.identity org.wso2.carbon.identity.auth.valve.AuthenticationValve.invoke(AuthenticationValve.java:74)上的.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:100)在org.wso2.carbon.tomcat.ext.valves org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer上的.CompositeValve.continueInvocation(CompositeValve.java:99)。org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.invoke))上的invokeValves(TomcatValveContainer.java:49)at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)于org.wso2的org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)的org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)的Java:146) org.wso2.carbon.tomcat.ext.valves.RequestEncodingValve.invoke(RequestEncodingValve.java:49)上的.carbon.tomcat.ext.valves.RequestCorrelationIdValve.invoke(RequestCorrelationIdValve.java:116)在org.apache.catalina.core上org.apache.catalina.connector.CoyoteAdapter上的.StandardEngineValve.invoke(StandardEngineValve.java:74)。org.apache.coyote.http11.Http11Processor.service(CoyoteAdapter.java:343)org.apache.coyote的org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)的service(Http11Processor.java:408) org.apache.tomcat.util.net.SocketProcessorBase.run上的.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:853)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1587)在org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在org.apache.tomcat的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)。 util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)343),位于org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408),位于org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66),位于org.apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:853)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1587)在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49 )的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)的org.apache.tomcat.util.threads.TaskThread $在java.lang.Thread.run(Thread.java:745)处WrappingRunnable.run(TaskThread.java:61)343),位于org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408),位于org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66),位于org.apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:853)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1587)在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) )的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)的org.apache.tomcat.util.threads.TaskThread $在java.lang.Thread.run(Thread.java:745)处WrappingRunnable.run(TaskThread.java:61)org.apache.coyote上的Http11Processor.service(Http11Processor.java:408).org.apache上的org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:853)上的AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)上的.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1587)在java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)上的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745)org.apache.coyote上的Http11Processor.service(Http11Processor.java:408).org.apache上的org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:853)上的AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)上的.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1587)在java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)上的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745)org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:853)的org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:的AbstractProcessorLight.process(AbstractProcessorLight.java:66) 1587)在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在java.util.concurrent.ThreadPoolExecutor $ Worker org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)的.run(ThreadPoolExecutor.java:617)在java.lang.Thread.run(Thread.java:745)org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:853)的org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:的AbstractProcessorLight.process(AbstractProcessorLight.java:66) 1587)在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在java.util.concurrent.ThreadPoolExecutor $ Worker org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)的.run(ThreadPoolExecutor.java:617)在java.lang.Thread.run(Thread.java:745)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)处util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1587)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor。 org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)上的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)上的java:1142) .Thread.run(Thread.java:745)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)处util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1587)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor。 org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)处的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)处的Java:1142) .Thread.run(Thread.java:745)tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)

查看更多

提问者
Vinod.T.V
被浏览
78
Piraveena Paralogarajah 2020-02-09 23:08

遵循以下步骤,我可以在IS 5.9.0中本地重现此问题:

  • 在主要IS中配置OAuth SP
  • 在主要IS中配置SAML身份提供程序
  • 在联合IDP中配置SAML服务提供程序。

当主要IS中的OAuth服务提供者调用/ oauth2 / authorize端点时,可以在控制台中获取以上错误日志。

在IS 5.9.0中,SAML出站联合会还报告了类似的git hub问题,该问题已通过最新IS(IS 5.10.0-beta)中的最新samlsso身份验证器修复。

As mentioned in the git issue, this error occurs only when you Enable Authentication Request Signing However, signing the authentication request is not mandatory unless you are expecting to extra-harden the security in the SSO process.

So as a workaround, you can disable signature validation in IS 5.9.0 as given below.

In Primary IS side:

  • Go to IS server mgt console and open the configurations of the identity provider Go to the tab Federated Authenticators Configuration -> SAML2 Web SSO Configuration and open the configuration there.
  • Untick Enable Authentication Request Signing option. 在此处输入图片说明

In Federated IDP side :

  • Go to Federated IDP mgt console and open the configurations of the service provider
  • Go to the tab Inbound Authentication Configuration -> SAML2 Web SSO Configuration and open the configuration there.
  • Untick Enable Signature Validation in Authentication Requests and Logout Requests if it's ticked previously.

在此处输入图片说明