idp auth module plugin

Paul Henson henson at signet.id
Mon Jul 18 20:23:36 UTC 2022


We are planning to put together an idp authentication module plug-in to 
support using the Rapid Identity authentication API. Rapid Identity is a 
commercial IAM released by Identity Automation:

	https://www.identityautomation.com/


Evidently it is seeing some popularity within the higher education 
community. While it includes its own SAML idp implementation, similar to 
other use cases where identity is maintained in Azure AD or a different 
commercial repository there is a desire to continue to use the 
shibboleth idp as the InCommon facing idp. Bradley University is 
sponsoring the development of the module, their specific use case is for 
it to provide TOTP and push MFA similar to Duo after using a built-in 
idp password authentication flow. They would like to open source the 
module once it is complete, and offer it to the consortium for inclusion 
in the distribution if there is interest. So I come seeking wisdom to 
make sure what we build will meet the idp’s strict standards and design 
philosophy :).

I’m planning to base it on the existing TOTP example authentication 
module; I am reasonably familiar with Java but spring and XML have been 
known to make my head hurt ;). I doubt if I could put this together from 
a blank slate but between the example module and other idp source code 
to reference I think it should work out.

While Bradley intends to use it as a secondary authentication flow after 
a password authentication, theoretically it could be a primary 
authentication flow as it supports password authentication, or if 
somebody wanted to use something other than passwords as a primary 
authentication mechanism. So my plan is for the first flow action to 
create the rapid authentication context and check to see if there is 
already a username associated with the request. If so, it will jump 
immediately to an action that initiates the rapid API. If not, it will 
jump to a form for a user to fill in the username, then process it and 
attach a username principal for the context, and then move on to the 
rapid API initialization. This initial step will also check for headers 
and store them to control the authentication process in the case of 
passive or non-browser access.

The API is REST-based over HTTPS:

	https://ri-doc-lts-html5.identitymgmt.net/en/rapididentity-authentication-api-guides.html


The rapid identity product can either be run on premise or it has a 
hosted cloud service. The URL to access it will be a property. There are 
no keys or shared secrets between the server and the client, the client 
trusts the server based solely on the SSL certificate it presents. As 
such, from a design perspective, would it be preferred to require that 
the certificate to validate the server be explicitly configured like 
with the LDAP client as opposed to using the default built in Java CA 
certificate store?

Rapid identity supports a fairly flexible authentication policy 
mechanism. An authentication policy defines which authentication methods 
and in which order they must be done to successfully authenticate. It is 
also possible that multiple authentication policies might apply to a 
user and allow them to choose which one they would like to use.

After the initialization call based on the supplied username the API 
returns either a specific authentication method or a list of policies a 
user can choose from along with what methods are included in them. If a 
specific authentication method is returned the flow will jump directly 
to processing it if whatever input necessary has already been supplied 
(eg, a TOTP code via a header) or if no input is necessary (eg, a push 
authentication). If input is required, it will jump to a view state 
displaying a form asking for the necessary input which will then be 
processed.

If a list of policies is returned, in the base case that each policy 
only has one authentication method (eg, you can pick between TOTP or 
push) a simple form will be displayed allowing the selection of the 
desired authentication method. If the policies have more than one 
authentication method, a more complicated form will be displayed naming 
the specific policies and showing which authentication methods they 
include allowing a user to choose between them. I’m planning to allow 
the user to have the option to save their preference in a cookie so the 
next time they need to authenticate they won’t have to choose.

If a specific authentication method succeeds, the API either returns 
that the authentication is complete, or it returns the next 
authentication method a user must pass. The flow will bounce between the 
necessary forms and authentication processing states until it reaches 
completion and moves on or an error is reached and the flow is aborted.

This is a pretty rough description, but I wanted to reach out early 
before I started the detailed implementation to see if anyone had any 
concerns or suggestions about this planned project (or perhaps the 
unlikely case that someone else was already working on a similar 
project). Thanks much for any thoughts or insights…


-- 
Signet - The Art of Access
https://www.signet.id/



More information about the dev mailing list