Management UI REST Directory User Mappings - SSO
Using REST Directory User Mapping for JIT provisioning
Overview
REST Directory User Mapping is an extension to the Directory User Mapping feature in Ubisecure SSO.
Where Directory User Mapping is implemented by LDAP URL patterns the REST Directory User Mapping calls a REST service that performs the actual mapping from one or more identity attributes to a directory user account.
REST service description
The request to the REST service is configured using a URL pattern with EL expression input parameters.
A successful response from the REST service uses HTTP status 200. Currently any other response status is considered invalid. No mapping is performed for an invalid response and usually this condition results in a Access Denied error.
The response from the REST service must be a well formed XML document. XPath expressions are used to fetch output parameter values from the XML document.
As of Ubisecure SSO version 6.6 it is only possible to describe a HTTP GET request.
URL pattern
Example URL pattern:
ubiloginServiceTemplate: http://services.example.com/mapping?from=$\{inparam1}
Input parameters
Example input parameter:
ubiloginServiceInputParameter: inparam1 ${method.aname}
This inparam1
input parameter description reads the value of the Method Attribute named aname
.
Example: if the aname
method attribute has the value extuser1234 then the REST HTTP request is:
GET http://services.example.com/mapping?from=extuser1234 HTTP/1.1
Output parameters
Example output parameter:
ubiloginServiceOutputParameter: directory.uniqueid /uniqueid/text()
This output parameter description sets the value of the directory.uniqueid
output parameter to the text content value of the XML root element named uniqueid
.
Example xml document:
<uniqueid>cn=mappeduser,ou=Users,cn=Ubilogin,dc=localhost</uniqueid>
The directory.uniqueid
is a special well known output parameter name. The value of this parameter is used to look up a Directory account for mapping.
Just In Time provisioning – JIT
To implement JIT provisioning the REST service must provide a get-or-create model.
Get-or-create
The REST service first looks for an existing account. If a valid account is found then the service generates a success response with this account's uniqueid.
If no valid account is found then the REST service creates a new account and generates a success response with the new account's uniqueid.
User attributes
Any number of user attributes may be passed to the JIT service to allow provisioning of user profile details such as first name, last name, e-mail etc.
Example:
ubiloginServiceTemplate: http://services.example.com/jit ?uid=${uid}&mail=${mail}&givenName=${givenName}&sn=${sn} ubiloginServiceInputParameter: uid ${method.uid} ubiloginServiceInputParameter: mail ${method.mail } ubiloginServiceInputParameter: givenName ${method.givenName} ubiloginServiceInputParameter: sn ${method.sn}
It is up to the JIT service implementation to perform any validation and sanity checks of the user attributes.
JIT Updates
When mapping to an existing directory account the JIT REST service may also choose to check and update attributes of the existing account.
Configuration – example
At this time no Management User Interface exists for managing REST services. The configuration entries need to be created using LDIF scripts or using a LDAP editor.
Directory User Mapping object
Use Ubisecure SSO Management to create a Directory User Mapping
object. This example uses name mapping
. Bind this mapping object to your external authentication method. Also make sure a Directory is selected for the authentication method. In this example Ubilogin Directory
is used.
Distinguished name of directory user mapping object
cn=mapping,cn=Server,ou=System,cn=Ubilogin,dc=localhost
Service object
The service object describes the REST URL pattern and output parameters
dn: cn=restservice,cn=Services,ou=System,cn=Ubilogin,dc=localhost changetype: add objectClass: top objectClass: ubiloginService cn: restclient ubiloginClassname: com.ubisecure.ubilogin.restclient.impl.UbiloginRestClientFactory ubiloginServiceOutputParameter: directory.uniqueid /uniqueid/text() ubiloginServiceTemplate: http://services.example.com/mapping?from=$\{inparam1}
This service expects a input parameter named inparam1
. The service returns an output parameter directory.uniqueid
with the text value of the XML root element named uniqueid
.
Service User Mapping Entry object
Create a service user mapping entry object as a child of the mapping object that was created previously. The name of this object is not significant.
dn: cn=entry1,cn=mapping,cn=Server,ou=System,cn=Ubilogin,dc=localhost changetype: add objectClass: top objectClass: ubiloginServiceUserMappingEntry cn: entry1 ubiloginDirectoryServiceDN: cn=Ubilogin Directory,cn=Services,ou=System,cn=Ubilogin,dc=localhost ubiloginServiceDN: cn=restservice,cn=Services,ou=System,cn=Ubilogin,dc=localhost ubiloginServiceInputParameter: inparam1 ${method.aname}
This description calls the REST service named restservice
passing a single parameter named inparam1
. The value of inparam1
is fetched from a method attribute named aname
.
If the output parameters of restservice
contain a parameter named directory.uniqueid
then directory user mapping to a Ubilogin Directory
account is performed.