Hi Oak and Sling Devs

I am working to make a SAML2 Sling Authentication Handler.  This is my project: 
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>
 It has a demo IDP which returns the SAML Security Assertion via a SOAP 
binding. The SAML assertion contains username, attributes and groups. I am 
trying to decide the best way to ... 
a) get or create the user 
b) add/remove the user to the groups 
c) add, change or remove synchronized users attributes.

I am reviewing the Oak External Login Module to see whether it can help with 
this...
https://jackrabbit.apache.org/oak/docs/security/authentication/externalloginmodule.html
 
<https://jackrabbit.apache.org/oak/docs/security/authentication/externalloginmodule.html>

It says…
 “The external login module has 2 main tasks. One is to authenticate 
credentials against a 3rd party system, the other is to coordinate syncing of 
the respective users and groups with the JCR repository (via the UserManager)."

and
“The synchronization of users and groups is triggered by the external login 
module, after a user is successfully authenticated against the IDP or if it’s 
no longer present on the IDP.”

In LDAP Auth, user credentials are passed from the user to the Oak-based 
application to the External LDAP IDP via External Login Module, which then 
triggers User Sync. In SAML2, authentication happens entirely at the External 
Identify provider (e.g. Shibboleth), and there is no handling of the users 
credentials at the Service Provider (Oak-based application) level. Instead, 
SAML2 Security Assertions are handed to the Sling Authentication Handler / 
Service Provider after authentication when the user is redirected back to the 
Assertion Consumer Servlet (ACS). Which is where my project is stalled a little 
bit. 

My Questions..
1. Once my ACS receives the user's SAML2 Assertion (either via SOAP or POST 
bindings), does it make sense to try using Oak’s User and Group 
Synchronization? If so, how would one configure or trigger it? Or should write 
my own user management code?

2. Given my use case, which if any of the Oak External Components should I 
configure?
ExternalLoginModuleFactory
DefaultSyncHandler
ExternalIDPManagerImpl
SyncManagerImpl
ExternalPrincipalConfiguration

Thank you!
Cris Rockwell
Applications Architect Sr  
College of Literature, Science, and the Arts | University of Michigan 
LSA Technology Services | Suite 505 | 301 E. Libery | Ann Arbor, MI I 48109

Reply via email to