hmmm - I used:

mvn clean install -DskipTests=true -Prelease

The repository entry is in there already.
No worky.

On Wed, Dec 2, 2015 at 10:12 AM, Jérôme LELEU <lel...@gmail.com> wrote:

> Hi,
>
> You need the j2e-pac4j dependencies as well as the pac4j-* dependencies,
> but you don't need to build them locally (hopefully).
>
> But you need a dependency on the Sonatype snapshots repository (where the
> snapshot versions are hosted), which is added for Maven in the root
> pom.xml:
>
> https://github.com/apache/knox/pull/2/files#diff-600376dffeb79835ede4a0b285078036R123
>
> If you use Ant for the build, there is maybe a glitch to find the Sonatype
> Maven repo.
>
> Thanks.
> Best regards,
> Jérôme
>
>
> 2015-12-02 16:06 GMT+01:00 larry mccay <larry.mc...@gmail.com>:
>
> > Oh - do I need to build j2e-pac4 locally in order to resolve the
> > dependencies?
> >
> > [ERROR] Failed to execute goal on project
> gateway-provider-security-pac4j:
> > Could not resolve dependencies for project
> > org.apache.knox:gateway-provider-security-pac4j:jar:0.7.0-SNAPSHOT: The
> > following artifacts could not be resolved:
> > org.pac4j:j2e-pac4j:jar:1.2.1-SNAPSHOT,
> > org.pac4j:pac4j-http:jar:1.8.1-SNAPSHOT,
> > org.pac4j:pac4j-config:jar:1.8.1-SNAPSHOT: Could not find artifact
> > org.pac4j:j2e-pac4j:jar:1.2.1-SNAPSHOT in public (
> > http://nexus-private.hortonworks.com/nexus/content/groups/public/) ->
> > [Help
> > 1]
> >
> > On Wed, Dec 2, 2015 at 10:05 AM, larry mccay <larry.mc...@gmail.com>
> > wrote:
> >
> > > gateway-provider-security-pac4j doesn't build - do you have a pending
> > > change for your pom.xml or something?
> > >
> > > On Wed, Dec 2, 2015 at 7:02 AM, larry mccay <larry.mc...@gmail.com>
> > wrote:
> > >
> > >> Hi Jérôme -
> > >>
> > >> Yes, that is the flow that I imagined as I walked through it
> yesterday.
> > >> It's great that there is an online CAS server to use - that's what was
> > >> keeping me from trying it out.
> > >>
> > >> I will give it a go and keep you posted.
> > >>
> > >> thanks,
> > >>
> > >> --larry
> > >>
> > >> On Wed, Dec 2, 2015 at 3:41 AM, Jérôme LELEU <lel...@gmail.com>
> wrote:
> > >>
> > >>> Hi,
> > >>>
> > >>> I'm a bit lost: how the principal provided in Subject.doAs should
> > become
> > >>> available in request.getPrincipalUser() ?
> > >>>
> > >>> I've done one more debugging session, but unsuccessfully. I'm
> confident
> > >>> the
> > >>> flow is correct.
> > >>> Let me resume what I understand one more time:
> > >>> - I call
> > >>> https://127.0.0.1:8443/gateway/sandbox/webhdfs/v1/tmp?op=LISTSTATUS,
> > >>> the SSOCookieProvider redirects me to
> > >>>
> > >>>
> >
> https://127.0.0.1:8443/gateway/idp/api/v1/websso?originalUrl=https://127.0.0.1:8443/gateway/sandbox/webhdfs/v1/tmp?op=LISTSTATUS
> > >>> - on this url, the pac4j provider is called first (before the KnoxSSO
> > >>> service), the current url is saved before redirecting to the CAS
> server
> > >>> where I log in
> > >>> - back to the callback url (
> > >>>
> > >>>
> >
> https://127.0.0.1:8443/gateway/idp/api/v1/websso?client_name=CasClient&ticket=ST-9-W12oWBh63C5Eub7IWNlj-cas01.example.org
> > >>> ),
> > >>> the pac4j provider is called again before the KnoxSSO service, deals
> > with
> > >>> the authentication process, saved the current user profile in a
> cookie
> > >>> and
> > >>> redirects to the originally requested url
> > >>> - on the originally requested url (
> > >>>
> > >>>
> >
> https://127.0.0.1:8443/gateway/idp/api/v1/websso?originalUrl=https://127.0.0.1:8443/gateway/sandbox/webhdfs/v1/tmp?op=LISTSTATUS
> > >>> ),
> > >>> the pac4j provider is called again, which retrieves the current user
> > >>> profile and grants access that's why we go to the
> Pac4jIdentityAdapter,
> > >>> which retrieves the current user profile and perform a doAs.
> > >>>
> > >>> Then, it dives into the Knox plumbery and there must be something
> wrong
> > >>> happening.
> > >>>
> > >>> In the Subject.doAs called in Pac4jIdentityAdapter, the request is a
> > >>> XForwardedHeaderRequestWrapper and the request.getUserPrincipal() is
> > >>> null.
> > >>> The CommonIdentityAssertionFilter is called (line 58), the request is
> > the
> > >>> same and the subject found is correct, the request is wrapped by
> > >>> a IdentityAsserterHttpServletRequestWrapper. In
> > >>> the AbstractIdentityAssertionFilter (line 100), the request is the
> > >>> wrapped
> > >>> one, the currentSubject is the right one. Then, I'm not sure what
> > should
> > >>> happen in the source code, but the doFilterInternal method is called
> > (in
> > >>> the continueChainAsPrincipal method). Finally, the ServletContainer
> > >>> filter
> > >>> is called to delegate to the WebSsoResource where
> > >>> request.getUserPrincipal
> > >>> returns null.
> > >>>
> > >>> Do you see something wrong in the latest steps ?
> > >>>
> > >>> I think it would really help if you could debug it yourself. Clone my
> > >>> repo:
> > >>> git clone https://github.com/leleuj/knox leleujknox, switch to the
> > >>> branch:
> > >>> git checkout pac4j, build everything, deploy knox, start in debug,
> > start
> > >>> the debugger in your favorite IDE, call:
> > >>> https://127.0.0.1:8443/gateway/sandbox/webhdfs/v1/tmp?op=LISTSTATUS.
> > The
> > >>> login must be the same as the password on the CAS server (an online
> > one).
> > >>> Then a breakpoint in the Pac4jIdentityAdapter line 63 is a good
> > starting
> > >>> point.
> > >>>
> > >>> Thanks.
> > >>> Best regards,
> > >>> Jérôme
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> 2015-12-01 19:38 GMT+01:00 larry mccay <larry.mc...@gmail.com>:
> > >>>
> > >>> > Hi Jérôme -
> > >>> >
> > >>> > I am trying to figure out why you aren't getting the username in
> > >>> > WebSSOResource.
> > >>> > If the default identity-assertion provider is indeed in place then
> > you
> > >>> > should get it.
> > >>> >
> > >>> > Is the pac4j identity adapter filter in the same request processing
> > as
> > >>> the
> > >>> > websso resource?
> > >>> > Not an easily asked question - let me try and be clear...
> > >>> >
> > >>> > Perhaps, you are pivotting during the OAuth handshake and a new
> > request
> > >>> > comes in which never makes it to WebSSOResource but sets the
> security
> > >>> > context and when control gets back to the original request
> processing
> > >>> that
> > >>> > context is no longer there?
> > >>> >
> > >>> > Does that make any sense?
> > >>> >
> > >>> > thanks,
> > >>> >
> > >>> > --larry
> > >>> >
> > >>> >
> > >>> > On Tue, Dec 1, 2015 at 11:15 AM, Jérôme LELEU <lel...@gmail.com>
> > >>> wrote:
> > >>> >
> > >>> > > Hi,
> > >>> > >
> > >>> > > 1) About the identity-assertion provider, I don't understand what
> > its
> > >>> > role
> > >>> > > is. I added it in my idp.xml topology but unsuccessfully:
> > >>> > >
> > >>> > >
> > >>> >
> > >>>
> >
> https://github.com/apache/knox/pull/2/files#diff-4ea9a9a5ee5968f29982478512a63c54R40
> > >>> > > Though, I still don't have any principal. I have a log telling me
> > the
> > >>> > user
> > >>> > > profile is retrieved in the Pac4jIdentityAdapter (before the
> doAs),
> > >>> but
> > >>> > the
> > >>> > > user principal is not retrieved from the request in the KnoxSSO
> > >>> service:
> > >>> > >
> > >>> > >
> > >>> >
> > >>>
> >
> https://github.com/apache/knox/blob/master/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java#L149
> > >>> > >
> > >>> > > Am I wrong in the identity-assertion provider configuration?
> Where
> > >>> > should I
> > >>> > > investigate?
> > >>> > >
> > >>> > > 2) Several things go into the web session: tokens (for example
> for
> > >>> OAuth
> > >>> > > 1.0), flow information (like the authentication has already been
> > >>> > performed
> > >>> > > to avoid infinite loop), authenticated user profile...
> > >>> > > I need to protect these information and share them among all the
> > >>> gateway
> > >>> > > instances. To share them, I save them in cookies and to protect
> > >>> them, I
> > >>> > > encrypt them.
> > >>> > >
> > >>> > > Notice that there is a new concept of SessionStore in pac4j and
> > >>> j2e-pac4j
> > >>> > > with a specific implementation for Knox (the session is stored
> into
> > >>> > > cookies) and we could save these session information almost
> > anywhere,
> > >>> > like
> > >>> > > in a clustered cache like Redis or Memcache for example. I'm not
> > too
> > >>> > > ambitious for this first version though.
> > >>> > >
> > >>> > > The encryption now works. My only question is about the generated
> > >>> > password:
> > >>> > > will it be different for each gateway instance? I'm expecting to
> > >>> have the
> > >>> > > same password as the encrypted cookies are shared.
> > >>> > >
> > >>> > > Thanks.
> > >>> > > Best regards,
> > >>> > > Jérôme
> > >>> > >
> > >>> > >
> > >>> > >
> > >>> > >
> > >>> > > 2015-11-25 14:18 GMT+01:00 larry mccay <larry.mc...@gmail.com>:
> > >>> > >
> > >>> > > > inline...
> > >>> > > >
> > >>> > > > On Wed, Nov 25, 2015 at 5:04 AM, Jérôme LELEU <
> lel...@gmail.com>
> > >>> > wrote:
> > >>> > > >
> > >>> > > > > Hi,
> > >>> > > > >
> > >>> > > > > Thanks for all your help. I've made the pac4j integration
> works
> > >>> in
> > >>> > Knox
> > >>> > > > > (using a simple basic auth where login = pwd or a remote CAS
> > >>> server).
> > >>> > > > >
> > >>> > > > >
> > >>> > > > Great!
> > >>> > > >
> > >>> > > >
> > >>> > > > > I have two points left (before more tests and documentation):
> > >>> > > > >
> > >>> > > > > 1) In my Pac4jIdentityAdapter, I successfully retrieved the
> > >>> > > authenticated
> > >>> > > > > user and perform a doAs with it, but I still end with an
> error
> > >>> 500.
> > >>> > > > Putting
> > >>> > > > >  a breakpoint in the WebSSOResource, I get null as the
> > >>> authenticated
> > >>> > > > > user (*Principal
> > >>> > > > > p *= (*(HttpServletRequest)request).getUserPrincipal();*).
> > Doing
> > >>> more
> > >>> > > > > debugging, I see that the original request in my
> > >>> Pac4jIdentityAdapter
> > >>> > > is
> > >>> > > > > a XForwardedHeaderRequestWrapper, then a filter is
> > >>> > > > > called: RegexIdentityAssertionFilter which encapsulates the
> > >>> request
> > >>> > in
> > >>> > > a
> > >>> > > > > new one: IdentityAsserterHttpServletRequestWrapper. So I
> don't
> > >>> > > understand
> > >>> > > > > why this filter comes into play and why my authenticated
> > subject
> > >>> is
> > >>> > > > "lost".
> > >>> > > > >
> > >>> > > > >
> > >>> > > > The fact that you are getting the RegExIdentityAssertionFilter
> > >>> sort of
> > >>> > > > points to an issue in your
> > >>> > > > topology. Unless you have purposely configured the regex
> > provider.
> > >>> > > >
> > >>> > > > Make sure that you have configuration that looks like this in
> > your
> > >>> > > > topology:
> > >>> > > >
> > >>> > > > <provider>
> > >>> > > >     <role>identity-assertion</role>
> > >>> > > >     <name>Default</name>
> > >>> > > >     <enabled>true</enabled>
> > >>> > > > </provider>
> > >>> > > >
> > >>> > > >
> > >>> > > >
> > >>> > > > > 2) To save session data, I use cookies: for each key, I have
> a
> > >>> cookie
> > >>> > > > whose
> > >>> > > > > value is the serialized object in base64. I don't think it's
> > >>> secure
> > >>> > > > enough,
> > >>> > > > > especially for the authenticated user profile. I think I
> could
> > >>> use
> > >>> > the
> > >>> > > > > JWTokenAuthority to wrap data in a token: does it make sense
> to
> > >>> use
> > >>> > it?
> > >>> > > > Is
> > >>> > > > > there any other way to secure data? What's your
> recommendation
> > /
> > >>> > > > > expectation? In a token, it seems I can only set a subject,
> > >>> issuer,
> > >>> > > > > audience and no extra attributes: am I getting it right?
> > >>> > > > >
> > >>> > > > >
> > >>> > > > What keys do you need to store in "session"?
> > >>> > > > Putting them in a JWT token in a cookie won't really make it
> any
> > >>> more
> > >>> > > > secure.
> > >>> > > >
> > >>> > > > They are signed but not encrypted.
> > >>> > > > We could extend the tokenAuthority to use encrypted tokens as
> > well
> > >>> if
> > >>> > > > really needed.
> > >>> > > > And you could put them in the generic claims of the token.
> > >>> > > > However, this is all pretty much a misuse of the token that is
> > >>> supposed
> > >>> > > to
> > >>> > > > represent an identity or authentication event.
> > >>> > > >
> > >>> > > > There is another gatewayService that you could use called the
> > >>> > > CryptoService
> > >>> > > > - you get to this the same way that you get to the
> > >>> > > > tokenAuthority, aliasService, etc.
> > >>> > > >
> > >>> > > > You could provision a password from your provider contributor -
> > >>> see:
> > >>> > > >
> > >>> > > >
> > >>> > > >
> > >>> > >
> > >>> >
> > >>>
> >
> https://github.com/apache/knox/blob/539557c902404529c4636bfe0425ba44980cc177/gateway-provider-rewrite-step-encrypt-uri/src/main/java/org/apache/hadoop/gateway/encrypturi/impl/EncryptUriDeploymentContributor.java
> > >>> > > >
> > >>> > > > The initializeContribution method initiates the creation of an
> > >>> > > > alias/password to be used for password based encryption later
> > while
> > >>> > > > protecting internal URL details.
> > >>> > > >
> > >>> > > > Note the simple injection of the AliasService just by adding a
> > >>> > > > setAliasService method to the contributor.
> > >>> > > >
> > >>> > > > Then in EncryptUriProcessor you will find the runtime use of
> that
> > >>> > > password
> > >>> > > > for PBE in:
> > >>> > > >
> > >>> > > >
> > >>> > > >
> > >>> > >
> > >>> >
> > >>>
> >
> https://github.com/apache/knox/blob/33bb1ce5727a54721baec0125dd1254d275160ac/gateway-provider-rewrite-step-encrypt-uri/src/main/java/org/apache/hadoop/gateway/encrypturi/impl/EncryptUriProcessor.java
> > >>> > > >
> > >>> > > > Note the lookup of the cryptoService.initialize() and its use
> in
> > >>> the
> > >>> > > > encode().
> > >>> > > >
> > >>> > > > This will certainly allow you to protect the keys within
> cookies
> > -
> > >>> if
> > >>> > > that
> > >>> > > > is what you are looking to do.
> > >>> > > >
> > >>> > > > I updated the pull request with my latest source code:
> > >>> > > > > https://github.com/apache/knox/pull/2
> > >>> > > > >
> > >>> > > > > Thanks.
> > >>> > > > > Best regards,
> > >>> > > > > Jérôme
> > >>> > > > >
> > >>> > > > >
> > >>> > > > >
> > >>> > > >
> > >>> > > > Hope that is helpful.
> > >>> > > >
> > >>> > > > --larry
> > >>> > > >
> > >>> > >
> > >>> >
> > >>>
> > >>
> > >>
> > >
> >
>

Reply via email to