Retrieving and Deleting tokens belonging to a user

Retrieving and Deleting tokens belonging to a user

Scenarios exist where the number of grants that belong to certain users needs to be limited. In the following example, OAuthMappingExtUtils.getGrants is used to demonstrate the scenario.

Configuration

Mapping rule snippet to be added into the pre token mapping rule

importClass(Packages.com.tivoli.am.fim.trustserver.sts.utilities.IDMappingExtUtils); importClass(Packages.com.tivoli.am.fim.trustserver.sts.utilities.OAuthMappingExtUtils); importClass(Packages.com.ibm.security.access.user.UserLookupHelper); IDMappingExtUtils.traceString("Entering pre token mapping rule") IDMappingExtUtils.traceString("Principal name is " + stsuu.getPrincipalName()); var client = stsuu.getContextAttributes().getAttributeValueByName("client_id"); var grants = OAuthMappingExtUtils.getGrants(stsuu.getPrincipalName()); var grants_per_user_per_client=0 ; for(let i=0; i< grants.length; i++){ var grant = grants[i]; if(grant["ClientID"] == client){ grants_per_user_per_client ++ } } IDMappingExtUtils.traceString("grants_per_user_per_client: " + grants_per_user_per_client); if (grants_per_user_per_client > 40){ OAuthMappingExtUtils.throwSTSException("Number of grant per user per cleint exceeded") }

Output

ristretto_1              | [08/21/2024 13:07:07.866 UTC] (internal.javascript.utils.traceFn) D [CORR_ID-3b684133-2cb9-490d-bd2e-107bf1feb5c5] "JS: grants_per_user_per_client: 56"
ristretto_1              | [08/21/2024 13:07:07.867 UTC] (internal.errors.ParseJSError) I [CORR_ID-3b684133-2cb9-490d-bd2e-107bf1feb5c5] "Javascript throw OAuth/OIDC error."
ristretto_1              | [08/21/2024 13:07:07.867 UTC] (internal.javascript.worker.workOnTask) E [CORR_ID-3b684133-2cb9-490d-bd2e-107bf1feb5c5] "Encounter error execute script: server_error."
ristretto_1              | [08/21/2024 13:07:07.867 UTC] (TokenHandler.HandlerFunc) E [CORR_ID-3b684133-2cb9-490d-bd2e-107bf1feb5c5] "EnrichSession failed: server_error"

Scenarios exist where tokens and grants that belong to certain users need to be deleted based on user inactivity. In the following example, an LDAP connection is established by using UserLookupHelper.

Configuration

LDAP Configuration

  • Server connection to connect to an LDAP instance.
server_connections: name: ldap_test type: ldap hosts: - hostname: isva-openldap hostport: 636 credential: bind_dn: 'cn=root,secAuthority=default' bind_password: "OBF:U2FsdGVkX19iBhl53QkybjO6RjFHhSbz4VRudYHA=" ssl: certificate: - ks:ldap_keystore disable_hostname_verification: true conn_settings: max_pool_size: 50 connect_timeout: 3
  • LDAP connection certificate added to the keystore.
keystore: - name: ldap_keystore type: pem certificate: - label: ldap content: | -----BEGIN CERTIFICATE----- MIIDGDCCAgCgAwIBAgIIZAWdygzDfYMwDQYJKoZIhvcNAQELBQAwKjELMAkGA1UE BhMCdXMxDDAKBgNVBAoTA2libTENMAsGA1UEAxMEaXNhbTAeFw0yMTA4MzAxMDU4 MDhaFw0zMTA4MjkxMDU4MDhaMCoxCzAJBgNVBAYTAnVzMQwwCgYDVQQKEwNpYm0x DTALBgNVBAMTBGlzYW0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDB /a4qF23bWGkc5p9P/9RzfdSV8jMW6nKOA04/64H4O8JyNtCOC4vd/4Malkd1YZD8 Rb9ikGma5dEOsNu4zE2wP9/twnGLbFKeVI/ZHodJ8lANnf5vpdJUaMyTEyVlIFQE AJfeA8M02UhM49A6VUvfwnx58+QvN1dgmLktNcY6B03m5wdTLId4eSqypVuGn02/ qKukeBg+ZxzxzCKsHDxiKEWghN3EHOR34oOifgmNPtRWoNWi8rH2f0XpObhboQW8 43AVmK7VRwSvNvtfMuCOGkUcWyMKdvXIy5PVQs4b7t8m7kM1za5DUhTMIJ+FTHpK 1IBs26y+tpDDdobrQt3dAgMBAAGjQjBAMB0GA1UdDgQWBBSMBiXM/22qeLEmXN72 UM1yRcQ7+zAfBgNVHSMEGDAWgBSMBiXM/22qeLEmXN72UM1yRcQ7+zANBgkqhkiG 9w0BAQsFAAOCAQEAjlZeaQAeunUnNMIgPfIB2dv4ydOxQ1fCvAKubfEGt+fQqM2R McEMEyerhDqbKgpn7/0znOnYX7wiN6ROw1Jh/f9Okf2B/k3zdVa8kx50PF5YKwyA lR8zAyMhfLIg/KbZed7gJidExrPzjl+ym8DLSbDVddzIw6bQxtzLloZWTdIa2oj0 GojEnRdv5ixTmh23abN5+GkWyLFoqOMjFMM8AV3OX3WMbPnxqUd21g0DckVlaSco 3m1l+Maq8oxBXWZO/k1U1Xao3OkvaYmtK3kWTqik1qPrM2M01AEY5R02jYAGyAo3 Uy5pvMl246wfM7qvRq9tQuVFkUDkqVM6R9m5dg== -----END CERTIFICATE-----
  • LDAP configuration for UserLookupHelper.
ldapcfg: - name: ldapServer1 scope: subtree user_object_classes: top,Person,organizationalPerson,inetOrgPerson filter: (|(|(objectclass=ePerson)(objectclass=person))(objectclass=User)) selector: objectClass,cn,sn,givenName,userPassword,max_inactive_time srv_conn: ldap_test attribute: uid baseDN: dc=ibm,dc=com
  • The ldapcfg stanza srv_conn must match the server_connections name that is defined for the LDAP type.
  • The mapping rule must use the ldapcfg configuration name ldapServer1 to initialize the connection.

Mapping rule snippet

importClass(Packages.com.tivoli.am.fim.trustserver.sts.utilities.IDMappingExtUtils); importClass(Packages.com.tivoli.am.fim.trustserver.sts.utilities.OAuthMappingExtUtils); importClass(Packages.com.ibm.security.access.user.UserLookupHelper); IDMappingExtUtils.traceString("Entering pre token mapping rule") IDMappingExtUtils.traceString("Principal name is " + stsuu.getPrincipalName()); var client = stsuu.getContextAttributes().getAttributeValueByName("client_id"); var userLookupHelper = new UserLookupHelper("ldapServer1"); if(userLookupHelper.isReady()){ var user = userLookupHelper.getUser(stsuu.getPrincipalName()); if(user.getId() != null){ var inactivity = user.getAttribute("max_inactive_time"); if(inactivity > "90"){ OAuthMappingExtUtils.deleteToken(stsuu.getPrincipalName(),client) } } }
  • The mapping rule connects to an LDAP instance by using UserLookupHelper, retrieves a user, and checks for a specific attribute. Based on the attribute, it determines whether the tokens that are related to that user need to be deleted.

Did this page help you?