Thanks for the reply. I am still sure there is some sort of issue. Putting
TomEE to one side for the moment, I am able to reproduce this in the
Geronimo JWT auth library as well. This PR includes a test to show what I
mean: https://github.com/apache/geronimo-jwt-auth/pull/3.

I can confirm that this change:
https://github.com/apache/openwebbeans/pull/12 enables that new test to
pass.

In short, if you @Inject JsonWebToken, or individual claims, or
use @RolesAllowed, I think you're ok, but if you @Inject Principal, you
will most likely get the wrong principal because the instance is cache in a
field in the org.apache.webbeans.portable.ProviderBasedProducer class, and
that looks like a security issue.

Jon

On Tue, Oct 30, 2018 at 5:56 AM Romain Manni-Bucau <rmannibu...@gmail.com>
wrote:

> Hi Jon,
>
> yes and no, idea is to be fast and for all producers it works except the
> principal which is broken anyway in CDI 1.x so guess this was not fixed
>
> in CDI 2 (tomee 8) we can impl it this way:
>
> https://github.com/apache/geronimo-jwt-auth/blob/master/src/test/java/org/apache/geronimo/microprofile/impl/jwtauth/tck/TckSecurityService.java
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://rmannibucau.metawerx.net/> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <
> https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> <
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> >
>
>
> Le mar. 30 oct. 2018 à 00:58, Jonathan Gallimore <
> jonathan.gallim...@gmail.com> a écrit :
>
> > Here's a question, probably for Mark or Romain. If I turn the proxy *off*
> > in org.apache.webbeans.component.PrincipalBean, I'm finding that I get
> the
> > wrong principal injected sometimes. Specifically, I get the whatever is
> on
> > the proxyInstance field here:
> >
> >
> https://github.com/apache/openwebbeans/blob/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducer.java#L51
> >
> > Should this line (line 66)
> >
> >
> https://github.com/apache/openwebbeans/blob/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducer.java#L66
> > ,
> > not simply be:
> >
> > return provider.get();
> >
> > as opposed to
> >
> > proxyInstance = provider.get(); ?
> >
> > That way, the proxyInstance field would never get set if proxy mode is
> set
> > to false. When proxy is true, this seems to work correctly (although I
> have
> > other unrelated issues in TomEE).
> >
> > I can probably work around this some other way, but it seems to me like
> > that behaviour isn't quite right.
> >
> > Trying to think of a way to test it - I can probably come up with
> > something, but I'd appreciate some pointers. Happy to shift this to
> > openwebbeans-dev, and submit a PR. Replying here initially as I ran into
> > this while hacking on the JWT code.
> >
> > Jon
> >
> > On Wed, Oct 17, 2018 at 12:41 AM Roberto Cortez
> > <radcor...@yahoo.com.invalid>
> > wrote:
> >
> > > Please, go ahead. Let me know if need anything. Thanks!
> > >
> > > > On 16 Oct 2018, at 21:53, Jonathan Gallimore <
> > > jonathan.gallim...@gmail.com> wrote:
> > > >
> > > > Any objection if I pick this up and have a go at the last tests, or
> is
> > > > someone already working on this?
> > > >
> > > > On Thu, Sep 27, 2018 at 5:44 PM Romain Manni-Bucau <
> > > rmannibu...@gmail.com>
> > > > wrote:
> > > >
> > > >> Yep this feature. Then it must works since we support user principal
> > if
> > > the
> > > >> jwt filter is corretly placed in the filter chain and we must
> inherit
> > > from
> > > >> the request principal.
> > > >>
> > > >> Le jeu. 27 sept. 2018 18:37, Roberto Cortez
> > <radcor...@yahoo.com.invalid
> > > >
> > > >> a
> > > >> écrit :
> > > >>
> > > >>> I guess you are referring to this, to remove the proxy?
> > > >>>
> > > >>>
> > > >>
> > >
> >
> https://github.com/apache/openwebbeans/commit/a21a949fb19247dcc39ee89292a1554b2cf1388e
> > > >>> <
> > > >>>
> > > >>
> > >
> >
> https://github.com/apache/openwebbeans/commit/a21a949fb19247dcc39ee89292a1554b2cf1388e
> > > >>>>
> > > >>>
> > > >>> Yes, this one step.
> > > >>>
> > > >>> By default, we do inject the generic Principal of Tomcat. We
> probably
> > > >> need
> > > >>> to check first about the existence of a JWT Principal and then
> > fallback
> > > >> to
> > > >>> the Tomcat one. I think I know how to do it, I was just trying to
> > > broaden
> > > >>> up the conversation about general integration with EE security.
> > > >>>
> > > >>> Cheers,
> > > >>> Roberto
> > > >>>
> > > >>>> On 26 Sep 2018, at 07:21, Romain Manni-Bucau <
> rmannibu...@gmail.com
> > >
> > > >>> wrote:
> > > >>>>
> > > >>>> OWB enable to do it - we did it in geronimo impl to pass tck of
> jwt
> > > >> auth
> > > >>>> spec.
> > > >>>>
> > > >>>> Le mer. 26 sept. 2018 03:28, Roberto Cortez
> > > >> <radcor...@yahoo.com.invalid>
> > > >>> a
> > > >>>> écrit :
> > > >>>>
> > > >>>>> Hi,
> > > >>>>>
> > > >>>>> I’ve done some work to push our MP JWT implementation from 1.0 to
> > > 1.1.
> > > >>>>>
> > > >>>>> You can check it here:
> > > >>>>> https://github.com/apache/tomee/pull/173 <
> > > >>>>> https://github.com/apache/tomee/pull/173>
> > > >>>>>
> > > >>>>> There are still a couple of tests in the TCK that I have to fix
> > and a
> > > >>> few
> > > >>>>> things that I would like to improve, but I think the majority of
> > the
> > > >>> work
> > > >>>>> is done.
> > > >>>>>
> > > >>>>> Some time ago, there was a discussion in the list about how to
> > > >> integrate
> > > >>>>> MP JWT with EE security:
> > > >>>>>
> > > >>>>>
> > > >>>
> > > >>
> > >
> >
> http://tomee-openejb.979440.n4.nabble.com/Implementing-Microprofile-JWT-td4683212i40.html
> > > >>>>> <
> > > >>>>>
> > > >>>
> > > >>
> > >
> >
> http://tomee-openejb.979440.n4.nabble.com/Implementing-Microprofile-JWT-td4683212i40.html
> > > >>>>>>
> > > >>>>>
> > > >>>>> I believe we need to revisit that conversation and figure out how
> > to
> > > >>> move
> > > >>>>> forward.
> > > >>>>>
> > > >>>>> Right now for instance, we don’t support injecting a JWT
> Principal
> > > >> since
> > > >>>>> it clashes with the predefined by CDI. Most likely, we would need
> > to
> > > >>> plugin
> > > >>>>> the JWT Principal lookup in TomcatSecurityService. I’m not sure
> if
> > we
> > > >>> want
> > > >>>>> to do it in that way, or if we want to think in something else.
> > > >>>>>
> > > >>>>> Cheers,
> > > >>>>> Roberto
> > > >>>
> > > >>>
> > > >>
> > >
> > >
> >
>

Reply via email to