Hi Dan Thank you for the feedback! I will look into your comments, and might follow up with you later. - Cris
> On Feb 25, 2020, at 9:52 PM, Daniel Klco <daniel.k...@gmail.com> wrote: > > Hey Chris, > > This looks like a really good start! A couple of thoughts: > > - It looks like a lot of exceptions are re-thrown as Runtime exceptions > which IMO tends to obscure expected exception handling, it looks like this > is WIP, but wanted to call it out > - You may want to look at the Dynamic Class Loader Manager: > > https://sling.apache.org/apidocs/sling8/org/apache/sling/commons/classloader/DynamicClassLoaderManager.html > - One thing to think about is how to store group membership. Due to a > certain project that some of the Jackrabbit folks are aware of, I've found > out quite painfully that the default Jackrabbit group membership has a hard > limit to the number of user -> group associations before performance gets > geometrically worse. You'll want to make sure your implementation supports > dynamic group membership if your user count is going to get into the > hundreds of thousands: > > https://jackrabbit.apache.org/oak/docs/security/authentication/external/dynamic.html > > Hope this helps and thanks for taking this on! > > On Tue, Feb 25, 2020 at 5:14 AM Robert Munteanu <romb...@apache.org> wrote: > >> Hi Cris, >> >> I am away until 9/3, I'll only be able to look into this then. Thanks! >> Robert >> >> Sent from Nine >> ________________________________ >> From: Cris Rockwell <cmroc...@umich.edu> >> Sent: Monday, 24 February 2020 19:07 >> To: users@sling.apache.org >> Subject: Re: OIDC or SAML2 for Sling >> >> Hi Robert >> >> I sent an email to d...@sling.apache.org <mailto:d...@sling.apache.org> on >> 2/20/2020, but I can’t find my message in the Dev Sling Mail Archive < >> http://apache-sling.73963.n3.nabble.com/template/NamlServlet.jtp?macro=search_page&node=73966&query=SAML2&days=0>…. >> Maybe this email group only allows messages from certain approved people. >> Whatever the reason, I’m responding to you again over Sling Users. >> >> I continue my work on to donate 'SAML2 Authentication Handler for Apache >> Sling’ to the Apache Sling Whiteboard. The project is is located at... >> >> https://github.com/cmrockwell/sling-whiteboard-saml/tree/sling-saml2-service-provider/saml-handler >> < >> https://github.com/cmrockwell/sling-whiteboard-saml/tree/sling-saml2-service-provider/saml-handler> >> >> >> 1. the implementation of the sample project < >> https://bitbucket.org/srasmusson/webprofile-ref-project-v3/src/master/> >> from A Guide to OpenSAML V3 eBook <https://payhip.com/b/41Tw> is added >> and functional as an AuthenticationHandler within Apache Sling, I will open >> a PR. I can recommend this book to anyone looking for a useful and concise >> primer for the OpenSAML V3 Java library. >> 2. next I will try to make use of the Default Sync Handler < >> https://jackrabbit.apache.org/oak/docs/apidocs/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/DefaultSyncHandler.html> >> to manage group membership and user attributes >> 3. also on the todo list, the HTTP POST binding vs SOAP Binding. The >> implementation in step 1 uses SOAP bindings >> >> It would be an honor if any you experienced Sling developers and security >> professionals would review and contribute your thoughts. >> >> Best regards >> Cris Rockwell >> Applications Architect Sr >> College of Literature, Science, and the Arts | University of Michigan >> LSA Technology Services | 6503 Haven Hall | 505 S. State Street | Ann >> Arbor, MI I 48109 >> Desk: 734.763.6818 | Email: cmroc...@umich.edu >> >> >> >>> On Feb 17, 2020, at 5:32 AM, Robert Munteanu <romb...@apache.org> >> wrote: >>> >>> Hi Cris, >>> >>> (Feel free to send back to dev@sling as well, replying privately as you >>> wrote privately). >>> >>> The POM looks good to me. I would suggest moving to the latest parent >>> bundle ( sling-bundle-parent 37 I think ) as it gives you Java 11 >>> support and better tooling. >>> >>> Also, we should not introduce new Maven repositories as part of our >>> bundles, since that does not work for every setup. For instance, >>> building behind a 'catch-all' Maven mirror that does not have the >>> custom repository set up will fail. I see that the artifacts you >>> referenced are already on Maven Central, so it's probably just a >>> leftover. >>> >>> As to your choice of library, I think that is fine. I am not very much >>> aware of the current landscape anyway, but as long as the license is >>> fine, it does what we need and has a reasonable community behind it, >>> all is well. >>> >>> What I think would also be helpful is a high-level diagram/explanation >>> of the goals of the bundle, e.g. >>> >>> - will allow Sling applications to authenticate users against Oauth2 >>> servers such as .... >>> - will allow sync of user attributes from OIDC providers such as ... >>> >>> (I may have gotten these totally wrong due to my lack of knowledge: -) >>> ) >>> >>> Thanks! >>> >>> Robert >>> >>> >>> On Fri, 2020-02-14 at 16:33 -0500, Cris Rockwell wrote: >>>> Hi Robert >>>> >>>> I’ve just started the project. Perhaps you can advise about the >>>> project setup. >>>> >>>> The pom.xml >>>> >> https://github.com/cmrockwell/sling-whiteboard/blob/sling-saml2-service-provider/saml-handler/pom.xml >>>> <https://github.com/cmrockwell/sling-whiteboard/blob/sling-saml2- >>>> service-provider/saml-handler/pom.xml> >>>> >>>> One test >>>> >> https://github.com/cmrockwell/sling-whiteboard/blob/sling-saml2-service-provider/saml-handler/src/test/java/org/apache/sling/auth/saml2/JCETest.java >>>> <https://github.com/cmrockwell/sling-whiteboard/blob/sling-saml2- >>>> service-provider/saml- >>>> handler/src/test/java/org/apache/sling/auth/saml2/JCETest.java> >>>> >>>> Regards >>>> Cris Rockwell >>>> Application Architect Senior >>>> College of Literature, Science, and the Arts | University of >>>> Michigan >>>> LSA Technology Services | 6503 Haven Hall, 505 S. State Street, Ann >>>> Arbor MI 48109 >>>> p: 734.763.6818 >>>> >>>> >>>> >>>> >>>>> On Feb 13, 2020, at 1:16 PM, Cris Rockwell <cmroc...@umich.edu> >>>>> wrote: >>>>> >>>>> Thanks for feedback, Robert. I could not agree more with you >>>>> suggestions. >>>>> >>>>> In terms of selecting a vetted library to do the bulk of the work; >>>>> >>>>> The University of Michigan is member of Internet2 and the >>>>> Shibboleth Consortium. These organizations maintain OpenSaml, >>>>> which is Apache licensed. I am very comfortable with the library’s >>>>> license, origin and maintenance. >>>>> >> https://www.internet2.edu/communities-groups/members/higher-education/all/all/all >>>>> <https://www.internet2.edu/communities-groups/members/higher- >>>>> education/all/all/all> >>>>> https://www.shibboleth.net/consortium/ < >>>>> https://www.shibboleth.net/consortium/> >>>>> OpenSaml is a very widely used Java library even outside of higher >>>>> education. A quick search shows many Apache projects including it >>>>> as a dependency. Such as: Apache Web Services Security for Java, >>>>> Apache Service Mix, Apache TomEE, an others. >>>>> >> https://issues.apache.org/jira/browse/CXF-5015?jql=text%20~%20%22opensaml%22 >>>>> <https://issues.apache.org/jira/browse/CXF- >>>>> 5015?jql=text%20~%20%22opensaml%22> >>>>> MVN shows usages at least 164 usages of V2 ( >>>>> https://mvnrepository.com/artifact/org.opensaml/opensaml/usages < >>>>> https://mvnrepository.com/artifact/org.opensaml/opensaml/usages>;). >>>>> Version 3 of the library is modular, and each of the modules (Core, >>>>> SAML Provider API, etc) are listed separately ( >>>>> https://mvnrepository.com/artifact/org.opensaml < >>>>> https://mvnrepository.com/artifact/org.opensaml>;) >>>>> >>>>> In terms of selecting a vetted library, I think OpenSaml V3 meets >>>>> the criteria. But how else would you vet the library? >>>>> >>>>> As you probably know, OpenSAML is a low level library useful for >>>>> building SAML solutions and not complete product by itself. For >>>>> example, Shibboleth is an open source product implemented in part >>>>> using OpenSAML. This is good from an open development perspective, >>>>> because features can be developed using a piecemeal process. The >>>>> Sling maintainers should not need to take a leap of faith about >>>>> anything related to the framework's security. >>>>> >>>>> >>>>> Regarding Whiteboard development, I am reviewing the examples about >>>>> how this works. >>>>> https://github.com/apache/sling-whiteboard/pull/14 < >>>>> https://github.com/apache/sling-whiteboard/pull/14> I forked Sling >>>>> Whiteboard and will create a branch for developing the feature. >>>>> >>>>> I have to give more thought about how to make the module easy to >>>>> test and incorporate in the Sling starter. >>>>> >>>>> Regards >>>>> Cris Rockwell >>>>> Application Architect Senior >>>>> College of Literature, Science, and the Arts | University of >>>>> Michigan >>>>> LSA Technology Services | 6503 Haven Hall, 505 S. State Street, Ann >>>>> Arbor MI 48109 >>>>> p: 734.763.6818 >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>>> On Feb 13, 2020, at 10:13 AM, Robert Munteanu <romb...@apache.org >>>>>> <mailto:romb...@apache.org>> wrote: >>>>>> >>>>>> Hi Cris, >>>>>> >>>>>> I would be very happy to see OIDC/SAML2 support in Sling. As >>>>>> mentioned, >>>>>> there were a couple of initiatives, but none of them completed. >>>>>> >>>>>> If anyone decides to give the implementation a shot, it would be >>>>>> important to: >>>>>> >>>>>> - use vetted libraries that do the bulk of the work. I think this >>>>>> was a >>>>>> problem with some of the earlier approaches >>>>>> - develop as much in the open as possible. The sling whiteboard >>>>>> is a >>>>>> good option, also a personal repo is ok if the intention is to >>>>>> contribute to Sling >>>>>> - make the module easy to test and incorporate in the Sling >>>>>> starter >>>>>> >>>>>> I am available to review and incorporate this contribution, and >>>>>> definitely there are others around. >>>>>> >>>>>> Thanks, >>>>>> Robert >>>>>> >>>>>> On Wed, 2020-02-12 at 16:27 -0500, Cris Rockwell wrote: >>>>>>> Hi Robert >>>>>>> >>>>>>> I would like to follow up with you about adding SAML2 SP >>>>>>> (Service >>>>>>> Provider) support to Apache Sling. >>>>>>> >>>>>>> Our team reviewed security requirements with the leading >>>>>>> identity >>>>>>> provider (IDP) administrator at the University. His suggestion >>>>>>> was to >>>>>>> use SAML2 (or OIDC) and skip the LDAP authentication idea. We >>>>>>> have >>>>>>> been using SAML2 for many years with other applications. It >>>>>>> seems >>>>>>> SAML2 for open and closed source Java Enterprise applications >>>>>>> is very >>>>>>> common, so I feel good about requesting SAML2 SP support for >>>>>>> Apache >>>>>>> Sling. >>>>>>> >>>>>>> To start, I am studying the eBook OpenSAML V3 mentioned on the >>>>>>> Shibboleth website < >>>>>>> https://wiki.shibboleth.net/confluence/display/OS30/Home < >>>>>>> https://wiki.shibboleth.net/confluence/display/OS30/Home>>;;. >>>>>>> The eBook >>>>>>> discusses a sample project < >>>>>>> >> https://bitbucket.org/srasmusson/webprofile-ref-project-v3/src/master/ >>>>>>> <https://bitbucket.org/srasmusson/webprofile-ref-project- >>>>>>> v3/src/master/> >>>>>>>> and covers various aspects of using OpenSaml3 Java library. >>>>>>> >>>>>>> * Authentication request using HTTP Redirect Binding >>>>>>> * Assertion transported using HTTP Artifact Binding >>>>>>> * SAML Artifact transported using HTTP Redirect Binding >>>>>>> >>>>>>> If you or others have thoughts or recommendations for me about >>>>>>> how to >>>>>>> make this happen, please let me know. >>>>>>> >>>>>>> Thanks >>>>>>> Cris Rockwell, App Sys Analyst/Programmer Sr >>>>>>> College of Literature, Science, and the Arts | University of >>>>>>> Michigan >>>>>>> LSA Technology Services | 6503 Haven Hall | 505 S. State Street >>>>>>> | Ann >>>>>>> Arbor, MI I 48109 >>>>>>> Desk: 734.763.6818 | Email: cmroc...@umich.edu <mailto: >>>>>>> cmroc...@umich.edu> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> On Dec 19, 2019, at 12:00 PM, Robert Munteanu < >>>>>>>> romb...@apache.org <mailto:romb...@apache.org>> >>>>>>>> wrote: >>>>>>>> >>>>>>>> Hi Cris, >>>>>>>> >>>>>>>> Hopefully the LDAP authentication will fulfill your >>>>>>>> requirements. >>>>>>>> Once >>>>>>>> you're done, it would be interesting to discuss (privately, >>>>>>>> if you >>>>>>>> prefer) what gaps you identified in the authentication >>>>>>>> support we >>>>>>>> offer. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Robert >>>>>>>> >>>>>>>> On Thu, 2019-12-12 at 09:45 -0500, Cris Rockwell wrote: >>>>>>>>> Hi Robert >>>>>>>>> >>>>>>>>> Thank you for your offer to guide an OIDC and/or SAML2 >>>>>>>>> Sling >>>>>>>>> Authentication Handler implementation. Long term, I could >>>>>>>>> also >>>>>>>>> see >>>>>>>>> contributing to a peer reviewed initiative to securely add >>>>>>>>> the >>>>>>>>> features to Sling applications. After some thought, I might >>>>>>>>> follow up >>>>>>>>> with you about this out of band. >>>>>>>>> >>>>>>>>> In the short run, perhaps Oak’s LDAP authentication will >>>>>>>>> support >>>>>>>>> the >>>>>>>>> features we need. >>>>>>>>> >> https://jackrabbit.apache.org/oak/docs/security/authentication/ldap.html >>>>>>>>> <https://jackrabbit.apache.org/oak/docs/security/authentic >>>>>>>>> ation/ldap.html> >>>>>>>>> < >>>>>>>>> https://jackrabbit.apache.org/oak/docs/security/authentication/ >>>>>>>>> < >>>>>>>>> https://jackrabbit.apache.org/oak/docs/security/authentication/ >>>>>>>>>> >>>>>>>>> ldap.html> >>>>>>>>> < >>>>>>>>> >> https://jackrabbit.apache.org/oak/docs/security/authentication/ldap >>>>>>>>> <https://jackrabbit.apache.org/oak/docs/security/authentic >>>>>>>>> ation/ldap> >>>>>>>>> < >>>>>>>>> >> https://jackrabbit.apache.org/oak/docs/security/authentication/ldap >>>>>>>>> <https://jackrabbit.apache.org/oak/docs/security/authentic >>>>>>>>> ation/ldap> >>>>>>>>> .html> >>>>>>>>> >> https://jackrabbit.apache.org/oak/docs/security/authentication/externalloginmodule.html >>>>>>>>> <https://jackrabbit.apache.org/oak/docs/security/authentic >>>>>>>>> ation/externalloginmodule.html> >>>>>>>>> < >>>>>>>>> https://jackrabbit.apache.org/oak/docs/security/authentication/ >>>>>>>>> < >>>>>>>>> https://jackrabbit.apache.org/oak/docs/security/authentication/ >>>>>>>>>> >>>>>>>>> externalloginmodule.html> >>>>>>>>> < >>>>>>>>> >> https://jackrabbit.apache.org/oak/docs/security/authentication/exte >>>>>>>>> <https://jackrabbit.apache.org/oak/docs/security/authentic >>>>>>>>> ation/exte> >>>>>>>>> rnalloginmodule.html> >>>>>>>>> >>>>>>>>> Thanks all. >>>>>>>>> Cris R >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> On Dec 11, 2019, at 11:58 AM, Robert Munteanu < >>>>>>>>>> romb...@apache.org> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> On Wed, 2019-12-11 at 11:38 -0500, Cris Rockwell wrote: >>>>>>>>>>> "What exactly would you need to manage JCR-based >>>>>>>>>>> controls? I >>>>>>>>>>> would >>>>>>>>>>> imagine that mapping users to JCR groups based on >>>>>>>>>>> whatever >>>>>>>>>>> data >>>>>>>>>>> your >>>>>>>>>>> identity solution provides and then creating access >>>>>>>>>>> based on >>>>>>>>>>> ACLs >>>>>>>>>>> only >>>>>>>>>>> would satisfy your request." >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> We need to manage a few things at the identity >>>>>>>>>>> provider: >>>>>>>>>>> 1. User attributes: username, name, email, phone, maybe >>>>>>>>>>> a few >>>>>>>>>>> other >>>>>>>>>>> pieces of data about the user. >>>>>>>>>>> 2. Group membership >>>>>>>>>>> >>>>>>>>>>> When the user signs in, with SAML2 there is encrypted >>>>>>>>>>> metadata >>>>>>>>>>> which >>>>>>>>>>> contains that information. Upon sign in, Sling users >>>>>>>>>>> should >>>>>>>>>>> be >>>>>>>>>>> created, their user attributes updated and the user >>>>>>>>>>> should be >>>>>>>>>>> added >>>>>>>>>>> or removed from Sling group membership. Once the user >>>>>>>>>>> has >>>>>>>>>>> signed >>>>>>>>>>> in, >>>>>>>>>>> then access is granted as usual using JCR-based ACL’s >>>>>>>>>>> applied >>>>>>>>>>> for >>>>>>>>>>> the >>>>>>>>>>> groups. >>>>>>>>>> >>>>>>>>>> Right, I see that there is no support for that in the >>>>>>>>>> keycloak >>>>>>>>>> handler, >>>>>>>>>> as it was presented [1]. >>>>>>>>>> >>>>>>>>>> I don't think there is any out-of-the-box support for >>>>>>>>>> what >>>>>>>>>> you're >>>>>>>>>> looking for. >>>>>>>>>> >>>>>>>>>> I would be happy to guide anyone willing to implement >>>>>>>>>> such >>>>>>>>>> functionality though. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Robert >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> [1]: >>>>>>>>>> >> https://github.com/netdava/adapt-to-2018-keycloak-sling-presentation/tree/master/adapt-to-2018-sling-keycloak/org-apache-sling-auth-keycloak >>>>>>>>>> < >>>>>>>>>> >> https://github.com/netdava/adapt-to-2018-keycloak-sling-presentation/tree/master/adapt-to-2018-sling-keycloak/org-apache-sling-auth-keycloak >>>>>>>>>> <https://github.com/netdava/adapt-to-2018-keycloak- >>>>>>>>>> sling-presentation/tree/master/adapt-to-2018-sling- >>>>>>>>>> keycloak/org-apache-sling-auth-keycloak> >>>>>>>>>> <https://github.com/netdava/adapt-to-2018-keycloak-sling- >>>>>>>>>> <https://github.com/netdava/adapt-to-2018-keycloak-sling- >>>>>>>>>>> >>>>>>>>>> presentation/tree/master/adapt-to-2018-sling- >>>>>>>>>> keycloak/org- >>>>>>>>>> apache-sling-auth-keycloak> >>> >> >>