Considerations for systems with large attribute or role volumes

Problem

Protocol limitations prevent large quantities of roles being sent over some bindings. Ubilogin Ticket Protocol is limited by data restrictions imposed when using the HTTP GET binding. Authentication may fail or loop if the number of roles or attributes is very large.

Solution

  • Use SAML SP products where possible
    The default configured SAML POST binding is not subject to the restrictions imposed when using the HTTP GET binding.
  • Use backend approaches
    Consider sending only the user identifier and retrieving roles via the CustomerID REST API after authentication is complete. The target application will need to be modified to query the REST API after login.
  • Limit roles sent to applications
    By default, the eidm:roles macro specified in an Authentication Policy sends all roles to an application. Limit sending of roles to applicable sets of roles using Blacklists and Whitelists as specified in Chapter 7.1 of the CustomerID Configuration guide.
  • Shorten role namespace
    Avoid unnecessary long role and organization names during system installation and configuration. Long role names can be converted to compact role names using the role mapping mapping functionality of the Authorizer component as described in Chapter 7.1 of the CustomerID Configuration guide.

  • CustomerID Authorizer policy configuration example with whitelist and role naming conversion
    Consider the following example eidm2-authorizer.properties which only sends the nominated whitelist of 8 roles as two character role names. Any additional roles are ignored.


    policy.3.name = compact
    policy.3.include = whitelist
    policy.3.roles.1 = eIDMUser
    policy.3.roles.2 = OrganizationMainUser
    policy.3.roles.3 = OrganizationUser
    policy.3.roles.4 = PendingTupasUser
    policy.3.roles.5 = PendingSMSUser
    policy.3.roles.6 = eIDMMainUser
    policy.3.roles.7 = OrganizationOwner
    policy.3.roles.8 = OrganizationAdmin
    policy.3.mapping.1 = mapping1
    policy.3.mapping.2 = mapping2
    policy.3.mapping.3 = mapping3
    policy.3.mapping.4 = mapping4
    policy.3.mapping.5 = mapping5
    policy.3.mapping.6 = mapping6
    policy.3.mapping.7 = mapping7
    policy.3.mapping.8 = mapping8


    mapping1 = eIDMUser
    mapping1.name = eu


    mapping2 = OrganizationMainUser
    mapping2.name = om


    mapping3 = OrganizationUser
    mapping3.name = ou


    mapping4 = PendingTupasUser
    mapping4.name = pt


    mapping5 = PendingSMSUser
    mapping5.name = ps


    mapping6 = eIDMMainUser
    mapping6.name = em


    mapping7 = OrganizationOwner
    mapping7.name = oo


    mapping8 = OrganizationAdmin
    mapping8.name = oa


    To use this policy, refer to policy name after eidm:roles: macro as shown below

In this example, if a user has a role OrganizationMainUser, it will be sent as om. If a user has a role called HRMainUser, it will not be sent as it is not on the whitelist. Blacklist functionality is available to send all roles excluding a list of given roles.


  • Use multiple applications sending only application specific roles

    In a proxy configuration using Web Agent for Apache, create multiple agents and use multiple activator files for each specific application.

    <Location "/supplierextranet">
           Ubilogin On
           UbiloginActivator conf/ubilogin/agent1.activator
           AuthType Basic
           Require valid-user
    </Location>


    <Location "/customerextranet">
           Ubilogin On
           UbiloginActivator conf/ubilogin/agent2.activator
           AuthType Basic
           Require valid-user
    </Location>


    For each specific application, configure a different authentication policy which references a different policy in the eid-authorizer.properties file. Specify a policy that contains only application specific roles. Thus large numbers of roles are never sent.

  • Modify Apache httpd settings to permit large volumes of data in GET requests

    By default, Apache httpd is configured to restrict the maximum length of a GET request.

    The Apache httpd setting LimitRequestLine controls this value

    http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestline

    Carefully consider mentioned security risks involved in increasing this value. All network hardware between the end user browser and the target application must be modified to allow larger values.