Wow, thanks for this great work, it is a big step forward.

Gj

On Sat, Oct 26, 2019 at 8:53 PM Matthias Bläsing <mblaes...@doppel-helix.eu>
wrote:

> Hi again,
>
> so I reactivated my PHP-foo and this is the result:
>
> https://github.com/apache/netbeans-tools/pull/15
>
> The PR holds a full implementation of changes I prototyped in java.
>
> For the "what was done", please see the PR. The portal can be tested
> at:
>
> https://doppel-helix.eu/pp3/
>
> Greetings
>
> Matthias
>
>
> Am Freitag, den 18.10.2019, 21:55 +0200 schrieb Matthias Bläsing:
> > Hi,
> >
> > it was raised on this list already and I agree, that tying the Plugin
> > Portal to a Google Account sound like a not too good idea. I for
> > example use my google account only for a minimal set of services and
> > don't see why that should change.
> >
> > At this point Plugin Portal 3 implements an OpenID Connect Implicit
> > Flow for Authentication. But I think other OAuth2 based
> > authentication
> > providers can be integrated with to much pain. I prototyped the idea
> > as
> > a dropwizard java application, that only implements the
> > authentication
> > flow. That application currently supports:
> >
> > - Google
> > - GitHub
> > - Amazon
> >
> > Other Authentication providers can be integrated. Required is, that
> > the
> > authentication provider uses OAuth2 and provides a Userinfo endpoint,
> > that returns:
> >
> > - a stable ID
> > - Name
> > - Email
> >
> > All providers listed above follow (loosly) the OpenID Connect "code"
> > flow.
> >
> > From my reading of https://oauth.apache.org/api.html it should be
> > possible to implement a authentication for apache committer account
> > (if
> > really requested).
> >
> > The sample code an be foud here:
> >
> > https://github.com/matthiasblaesing/PluginPortalDemo
> >
> > You can test the authentication flow youself. I made the application
> > available on:
> >
> > https://doppel-helix.eu:9000/
> >
> > Be warned: all requests are logged. I will not be able to see your
> > passwords (that is the whole point of the OAuth protocol), but the
> > requested information (profile data).
> >
> > 1. Open https://doppel-helix.eu:9000/oauth/
> >
> > You will get a JSON document, that lists als authentication providers
> > I
> > configured.
> >
> > Code:
> >
> https://github.com/matthiasblaesing/PluginPortalDemo/blob/master/src/main/java/eu/doppel_helix/dev/pluginportaldemo/resources/AuthenticationResource.java#L69
> >
> > 2. From that list get the id of the provider you want to test and
> > open
> >
> > https://doppel-helix.eu:9000/oauth/start/<id>
> > For example to authenticate with github you would run:
> > https://doppel-helix.eu:9000/oauth/start/github
> >
> > Code:
> >
> https://github.com/matthiasblaesing/PluginPortalDemo/blob/master/src/main/java/eu/doppel_helix/dev/pluginportaldemo/resources/AuthenticationResource.java#L75
> >
> > 3. Now you will be redirected to the authentication provider.
> >
> > If you have not yet signed in to your account, you will be asked to
> > do
> > so. This is communication between you and the authentication
> > provider,
> > so my code will not be involved and thus not be able to access your
> > password. After sign in you will be asked if you consent, that the
> > Demo
> > Application accesses your profile data (depending on authentication
> > provider this is differently worded). If you consent, you will be
> > redirect back to my code.
> >
> > 4. You are redirected to https://doppel-helix.eu:9000/oauth/code
> >
> > The authentication provider calls the above mentioned URL with a
> > "code". That code is exchanged for an access token:
> >
> > Code:
> >
> https://github.com/matthiasblaesing/PluginPortalDemo/blob/master/src/main/java/eu/doppel_helix/dev/pluginportaldemo/resources/AuthenticationResource.java#L114
> >
> > With the access token the userinfo endpoint is contacted to query the
> > userdata:
> >
> > Code:
> >
> https://github.com/matthiasblaesing/PluginPortalDemo/blob/master/src/main/java/eu/doppel_helix/dev/pluginportaldemo/resources/AuthenticationResource.java#L126
> >
> > The userdata is converted to a unified format and returned:
> >
> > Code:
> >
> https://github.com/matthiasblaesing/PluginPortalDemo/blob/master/src/main/java/eu/doppel_helix/dev/pluginportaldemo/resources/AuthenticationResource.java#L133
> >
> > At this point the session could be updated to the logged in state.
> >
> >
> > This was done as a java application to keep my sanity - but it can be
> > (and I'm willing to do that) transferred to PHP. I will only do that
> > if
> > there is agreement, that this is a good idea, as this also needs
> > updates to the persistent data. We can't use the email as an
> > identifier
> > anymore (but even google says, that the email can change, while their
> > provided ID will be constant), so we need to indirect that to a user
> > table:
> >
> > user:
> >   id - internal id
> >   idp_id - ID of the identity provider
> >   idp_user_id - ID the identity provider assigned to the user
> >   name - Real name (if needed)
> >   nick - a choosen and displayed nickname
> >   email - Emailadress from last login (if needed)
> >
> >
> > id would be the primary key, idp_id and idp_user_id form a compound
> > key
> > and must be unique too.
> >
> >
> > Thank you to anyone, that made it to this point and/or tested the
> > sample. I'd like to hear, what you think.
> >
> > Matthias
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@netbeans.apache.org
> > For additional commands, e-mail: dev-h...@netbeans.apache.org
> >
> > For further information about the NetBeans mailing lists, visit:
> > https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
> >
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@netbeans.apache.org
> For additional commands, e-mail: dev-h...@netbeans.apache.org
>
> For further information about the NetBeans mailing lists, visit:
> https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
>
>
>
>

Reply via email to