Re: ContextNotActiveException when using OpenIdAuthenticationMechanism with notifiyProvider

Richard Zowalla <[email protected]> Fri, 13 Mar 2026 13:12:15 +0100
Newsgroups gmane.comp.java.openejb.user
Message-ID <91090943-B06B-4244-A9C7-A17091848B13__47147.4441512086$1773403998$gmane$org@apache.org>
Hi,

Perhaps it would be best, if you could upload that reproducer, so we can =
replicate.

Gru=C3=9F
Richard

> Am 13.03.2026 um 12:24 schrieb Benedikt Lang <[email protected]>:
>=20
> Hello Markus,
>=20
>=20
> our Keycloak Client is indeed set up as a public client. However =
changing it to a confidential one and configuring the client secret did =
not change the outcome.
>=20
> A colleague of mine built a minimal reproducer and we experimented a =
bit. The exception only shows, when using the authentication mechanism =
with JAX-RS. When using a servlet directly the exception vanishes.
>=20
>=20
> Hope this helps
>=20
> Thanks
>=20
> Benedikt
>=20
> On 13.03.26 09:07, Markus Jung wrote:
>> Hello Benedikt,
>>=20
>>=20
>> your config is _very_ similar to the one we run at my company, I also =
added a test to verify this behavior works =
(https://github.com/apache/tomee/commit/9efdac831ae6a906664fd0c72b0ccd8410=
a528ce) which passes on my machine.  I noticed your =
@OpenIdAuthenticationMechanismDefinition does not contain a client =
secret. Did you simply remove it before copying into your mail or is =
your client in Keycloak maybe configured for public access (=3D Client =
authentication in Keycloak turned off)?
>>=20
>>=20
>> Thanks
>>=20
>> Markus
>>=20
>>=20
>> On 3/12/26 10:15, Benedikt Lang wrote:
>>> Hello Markus,
>>>=20
>>>=20
>>> thanks for the reply.
>>>=20
>>> The definition reads as follows:
>>>=20
>>> ```java
>>>=20
>>> @OpenIdAuthenticationMechanismDefinition(providerURI =
=3D"${openId.providerURI}", clientId =3D"${openId.clientId}", =
redirectURI =3D"${baseURL}", redirectToOriginalResource =3Dfalse, logout =
=3D@LogoutDefinition(notifyProvider =3Dtrue, redirectURI =3D"${baseURL}"))=

>>>=20
>>> ```
>>>=20
>>> With the providerUri being `https://<domain>/realms/<realmName>`.
>>>=20
>>> We are using Keycloak as our OIDC provider as well. Furthermore I'm =
pretty sure the Access Token validates as the Endpoint is secured.
>>>=20
>>>=20
>>> Thanks
>>>=20
>>> Benedikt
>>>=20
>>>=20
>>> On 11.03.26 19:05, Markus Jung wrote:
>>>> Hello Benedikt,
>>>>=20
>>>> from a first glance looks like either a bug in TomEE or your =
session hasn't been properly authenticated (Access token/ID token failed =
to verify?).
>>>> I'm curious about the rest of your =
@OpenIdAuthenticationMechanismDefinition. Could you possibly share that? =
Also, what OIDC provider are you using?
>>>>=20
>>>> We're running the OIDC authentication at my company with =
notifyProvider=3Dtrue on logout without any issues on Keycloak. That's =
also what I tested against during the implementation, so there could of =
course still be quirks to with other OIDC providers.
>>>>=20
>>>>=20
>>>> Thanks
>>>> Markus
>>>>=20
>>>> Am 11. M=C3=A4rz 2026 18:07:43 MEZ schrieb Benedikt =
Lang<[email protected]>:
>>>>> Hello,
>>>>>=20
>>>>> I am using TomEE 10.1.4 to serve a web application. For =
authentication I am using the OpenIdAuthenticationMechanisms via =
`@OpenIdAuthenticationMechanismDefinition`. When using =
notifyProvider=3Dfalse the logout endpoint runs fine, but when setting =
it to true I receive the following exception:
>>>>>=20
>>>>> ```
>>>>>=20
>>>>> jakarta.enterprise.context.ContextNotActiveException: WebBeans =
context with scope type annotation @SessionScoped does not exist within =
current thread
>>>>>          at =
org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.j=
ava:339)
>>>>>          at =
org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContex=
tualInstance(NormalScopedBeanInterceptorHandler.java:89)
>>>>>          at =
org.apache.webbeans.intercept.SessionScopedBeanInterceptorHandler.getConte=
xtualInstance(SessionScopedBeanInterceptorHandler.java:76)
>>>>>          at =
org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(Norma=
lScopedBeanInterceptorHandler.java:71)
>>>>>          at =
org.apache.tomee.security.cdi.openid.TomEEOpenIdContext$$OwbNormalScopePro=
xy0.getIdentityToken(org/apache/tomee/security/cdi/openid/TomEEOpenIdConte=
xt.java)
>>>>>          at =
org.apache.tomee.security.cdi.OpenIdAuthenticationMechanism.cleanSubject(O=
penIdAuthenticationMechanism.java:87)
>>>>>          at =
org.apache.tomee.security.cdi.OpenIdAuthenticationMechanism$$OwbNormalScop=
eProxy0.cleanSubject(org/apache/tomee/security/cdi/OpenIdAuthenticationMec=
hanism.java)
>>>>>          at =
org.apache.tomee.security.cdi.DefaultAuthenticationMechanism.cleanSubject(=
DefaultAuthenticationMechanism.java:56)
>>>>>          at =
org.apache.tomee.security.cdi.DefaultAuthenticationMechanism$$OwbNormalSco=
peProxy0.cleanSubject(org/apache/tomee/security/cdi/DefaultAuthenticationM=
echanism.java)
>>>>>          at =
org.apache.tomee.security.provider.TomEESecurityServerAuthModule.cleanSubj=
ect(TomEESecurityServerAuthModule.java:60)
>>>>>          at =
org.apache.tomee.security.provider.TomEESecurityServerAuthContext.cleanSub=
ject(TomEESecurityServerAuthContext.java:37)
>>>>>          at =
org.apache.catalina.authenticator.AuthenticatorBase.logout(AuthenticatorBa=
se.java:1238)
>>>>>          at =
org.apache.catalina.connector.Request.logout(Request.java:2527)
>>>>>          at =
org.apache.catalina.connector.RequestFacade.logout(RequestFacade.java:764)=

>>>>>          at =
jakarta.servlet.http.HttpServletRequestWrapper.logout(HttpServletRequestWr=
apper.java:302)
>>>>>          at =
org.apache.openejb.server.httpd.EEFilter$NoCdiRequest.logout(EEFilter.java=
:95)
>>>>>          at =
org.apache.openejb.server.httpd.ServletRequestAdapter.logout(ServletReques=
tAdapter.java:92)
>>>>>          at =
jakarta.servlet.http.HttpServletRequestWrapper.logout(HttpServletRequestWr=
apper.java:302)
>>>>>          at =
org.apache.openejb.rest.ThreadLocalHttpServletRequest.logout(ThreadLocalHt=
tpServletRequest.java:398)
>>>>>          at =
<redacted>.LogoutRestAdapter.logout(LogoutRestAdapter.java:36)
>>>>>          at =
<redacted>t.LogoutRestAdapter$$OwbNormalScopeProxy0.logout(<redacted>/Logo=
utRestAdapter.java)
>>>>>          at =
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native =
Method)
>>>>>          at =
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMetho=
dAccessorImpl.java:77)
>>>>>          at =
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Delegat=
ingMethodAccessorImpl.java:43)
>>>>>          at =
java.base/java.lang.reflect.Method.invoke(Method.java:569)
>>>>>          at =
org.apache.openejb.server.cxf.rs.PojoInvoker.performInvocation(PojoInvoker=
.java:37)
>>>>>          at =
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java=
:96)
>>>>>          at =
org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:200)
>>>>>          at =
org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:103)
>>>>>          at =
org.apache.openejb.server.cxf.rs.AutoJAXRSInvoker.invoke(AutoJAXRSInvoker.=
java:68)
>>>>>          at =
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerI=
nterceptor.java:59)
>>>>>          at =
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(Service=
InvokerInterceptor.java:96)
>>>>>          at =
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorCha=
in.java:307)
>>>>>          at =
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiation=
Observer.java:121)
>>>>>          at =
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPD=
estination.java:267)
>>>>>          at =
org.apache.openejb.server.cxf.rs.CxfRsHttpListener.doInvoke(CxfRsHttpListe=
ner.java:266)
>>>>>          at =
org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:8=
0)
>>>>>          at =
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati=
onFilterChain.java:162)
>>>>>          at =
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter=
Chain.java:138)
>>>>>          at =
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
>>>>>          at =
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati=
onFilterChain.java:162)
>>>>>          at =
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter=
Chain.java:138)
>>>>>          at =
org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:67)
>>>>>          at =
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati=
onFilterChain.java:162)
>>>>>          at =
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter=
Chain.java:138)
>>>>>          at =
io.smallrye.metrics.jaxrs.JaxRsMetricsServletFilter.doFilter(JaxRsMetricsS=
ervletFilter.java:37)
>>>>>          at =
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati=
onFilterChain.java:162)
>>>>>          at =
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter=
Chain.java:138)
>>>>>          at =
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.=
java:165)
>>>>>          at =
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.=
java:88)
>>>>>          at =
org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
>>>>>          at =
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBa=
se.java:607)
>>>>>          at =
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:1=
13)
>>>>>          at =
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:8=
3)
>>>>>          at =
org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(O=
penEJBSecurityListener.java:97)
>>>>>          at =
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLog=
Valve.java:654)
>>>>>          at =
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.ja=
va:72)
>>>>>          at =
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342=
)
>>>>>          at =
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)=

>>>>>          at =
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.ja=
va:63)
>>>>>          at =
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProto=
col.java:903)
>>>>>          at =
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.j=
ava:1775)
>>>>>          at =
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.jav=
a:52)
>>>>>          at =
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExec=
utor.java:973)
>>>>>          at =
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExe=
cutor.java:491)
>>>>>          at =
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.=
java:63)
>>>>>          at java.base/java.lang.Thread.run(Thread.java:840)
>>>>>=20
>>>>> ```
>>>>>=20
>>>>>=20
>>>>> Is this a bug in TomEE? What should I look out for to determine =
what the culprit is?
>>>>>=20
>>>>>=20
>>>>> Best regards
>>>>>=20
>>>>> Benedikt Lang
>>>>>=20
>>>>>=20