Opérations SCIM dans Liberty

Les spécifications System for Cross-domain Identity Management (SCIM) 1.1 sont prises en charge dans Liberty.

Extraction de ressources

WebSphere Application Server Liberty prend en charge les spécifications SCIM 1.1. Pour plus d'informations sur la spécification, voir http://www.simplecloud.info/.

Pour extraire une ressource connue, vous devez envoyer une demande GET au noeud final HTTP configuré. Par exemple, /Users/{id} ou /Groups/{id}.

L'exemple ci-après illustre les opérations dans un registre LDAP.
    <ldapRegistry id="LDAP1" realm="SampleLdapIDSRealm" host="9.127.1.90" port="1389" ignoreCase="true"
        baseDN="o=ibm,c=us" ldapType="IBM Tivoli Directory Server" searchTimeout="8m" recursiveSearch="true"
        bindDN="xxxxxx" bindPassword="xxxxxxx">
	    <ldapEntityType name="PersonAccount">
	        <rdnProperty name="uid" objectClass="inetOrgPerson"/>
                <objectClass>inetOrgPerson</objectClass>
            </ldapEntityType>
            <ldapEntityType name="Group">
	        <objectClass>groupofnames</objectClass>
		<objectClass>ibm-nestedGroup</objectClass>
		  <rdnProperty name="cn" objectClass="groupofnames"/>
	    </ldapEntityType>
    <attributeConfiguration>
        <attribute name="title" propertyName="honorificPrefix" syntax="String" entityType="PersonAccount">
        </attribute>
	<attribute name="initials" propertyName="middleName" syntax="String" entityType="PersonAccount">
        </attribute>
	<attribute name="st" propertyName="honorificSuffix" syntax="String" entityType="PersonAccount">
        </attribute>
	<attribute name="l" propertyName="homeStateOrProvinceName" syntax="String" entityType="PersonAccount">
        </attribute>
	<attribute name="street" propertyName="homeStreet" syntax="String" entityType="PersonAccount">
        </attribute>
	<attribute name="postalAddress" propertyName="homeCity" syntax="String" entityType="PersonAccount">
        </attribute>
	<attribute name="postalCode" propertyName="homePostalCode" syntax="String" entityType="PersonAccount">
        </attribute>
       <attribute name="postOfficeBox" propertyName="homeCountryName" syntax="String" entityType="PersonAccount">
        </attribute>
        <attribute name="departmentNumber" propertyName="photoURLThumbnail" syntax="String" entityType="PersonAccount">
        </attribute>
	<attribute name="description" propertyName="photoURL" syntax="String" entityType="PersonAccount">
        </attribute>
    </attributeConfiguration>
    <groupProperties>
        <memberAttribute name="member" dummyMember="uid=dummy" objectClass="groupOfNames" scope="direct"/>
	<memberAttribute name="ibm-memberGroup" objectClass="ibm-nestedGroup" scope="direct"/>
    </groupProperties> 
</ldapRegistry>
Pour extraire une ressource de LDAP, vous devez envoyer une demande GET sous la forme https://localhost:9090/ibm/api/scim/Users/uid=jsmith,o=ibm,c=us.

Interrogation de ressources

Pour interroger des ressources, vous devez envoyer une demande GET au noeud final HTTP configuré et indiquer le filtre pour la recherche. Vous pouvez également spécifier le paramètre attributes afin de retourner un sous-ensemble de valeurs des ressources retournées et spécifier les paramètres paging et sorting afin d'organiser les ressources retournées. Les exemples suivants illustrent quelques options de filtre :
  • Indiquez le paramètre permettant d'extraire le sous-ensemble de valeurs. Par exemple : https://localhost:9090/ibm/api/scim/Users?filter=givenname sw "Jo" extrait tous les utilisateurs dont le nom commence par “Jo”.
  • Indiquez le paramètre attributes afin d'extraire le sous-ensemble des valeurs. Par exemple : https://localhost:9090/ibm/api/scim/Users?filter=givenname sw "Jo"&attributes=username,emails&filter=name.familyname eq "Smith" extrait les adresses e-mail du nom d'utilisateur qui commence par “Jo” et dont le nom de famille est “Smith”.
  • Indiquez les paramètres paging et sorting afin d'extraire les ressources organisées. Exemple : https://localhost:9090/ibm/api/scim/Users?filter=givenname sw "Jo"&attributes=username&sortBy=username&startIndex=3&count=5 extrait la troisième page du résultat trié avec chaque page contenant cinq noms d'utilisateur commençant par “Jo” et dont le nom de famille est “Smith”.
Remarques :
  • Les référentiels fédérés sous-jacents déterminent si les valeurs qui sont spécifiées dans les filtres sont sensibles à la casse. Dans le cas de LDAP, les valeurs ne sont pas sensibles à la casse par défaut, à moins que l'attribut ne soit mappé à un attribut LDAP sensible à la casse.
  • Le nom d'utilisateur ne peut pas être utilisé dans le filtre de recherche.
  • Lors de la fédération de registres de base, SAF ou personnalisés qui ne prennent pas en charge les attributs SCIM, le modèle de filtre est toujours recherché par rapport au nom d'utilisateur et seul l'attribut de nom d'utilisateur est retourné.

Création de ressources

Pour créer de nouvelles ressources, vous devez envoyer une demande POST au noeud final de ressource, en l'occurrence Users ou Groups. Les données POST doivent contenir l'objet json utilisateur et le type de contenu d'en-tête HTTP doit être défini sur application/json.
Remarque : Le type de contenu application/xml n'est pas pris en charge.
Pour créer un utilisateur, il est nécessaire de publier la demande suivante à l'adresse https://localhost:9090/ibm/api/scim/Users Content-Type
Content-Type: application/json
Content-Length: ...

{
  "schemas":["urn:scim:schemas:core:1.0"],
  "userName":"bjensen",
  "externalId": "uid=bjensen,o=ibm,c=us",
  "name":{
    "familyName":"Jensen",
    "givenName":"Barbara"
  }
}

La demande doit comporter tous les attributs qui sont nécessaires pour la création d'un utilisateur ou d'un groupe dans le registre d'utilisateurs. Par exemple, dans une version d'arrière plan de Tivoli Directory Server LDAP, l'ensemble d'attributs LDAP minimum nécessaire pour la création d'un utilisateur serait uid, sn, and cn. Par conséquent, toute demande de création d'un utilisateur doit comporter userName, givenName et familyName. L'opération de création échoue en cas de violation de schéma depuis le registre d'utilisateurs.

L'attribut externalId fait office d'identificateur et il doit être spécifié. Le format d'attribut dépend de la spécification du registre d'utilisateurs d'arrière plan. Dans l'exemple précédent, l'arrière plan est un serveur LDAP avec comme baseEntry o=ibm,c=us et la propriété RDN pour l'utilisateur est définie sur UID, de sorte que externalId devient uid=bjensen,o=ibm,c=us.

L'objet utilisateur créé est retourné en fonction de la demande de création.
{
    "schemas":["urn:scim:schemas:core:1.0"],
    "id":"uid=bjensen,o=ibm,c=us",
    "userName":"bjensen",
    "externalId":"uid=bjensen,o=ibm,c=us",
    "name":{
          "formatted":"Barbara Jensen",
          "familyName":"Jensen",
          "givenName":"Barbara"
    },
    "meta":{
         "lastModified":"2015-09-15T14:30:11",        "location":"https:\\localhost:9090\ibm\api\scim\Users\uid=bjensen,o=ibm,c=us",
         "created":"2015-09-15T14:30:11"
    }
}
Lorsque plusieurs LDAP sont configurés et qu'une opération d'appel doit être appelée, un parent par défaut doit être défini pour l'entité. Ce parent indique l'entrée de base sous laquelle la nouvelle entité va être créée. L'exemple ci-après illustre la configuration d'un parent par défaut pour PersonAccount.
<federatedRepository>
    <primaryRealm name="WIMRegistry">
        <participatingBaseEntry name="o=ibm,c=us"/>
        <participatingBaseEntry name="o=ldap"/>
    </primaryRealm>
    <supportedEntityType>
        <defaultParent>o=ldap</defaultParent>
        <name>PersonAccount</name>
    </supportedEntityType>
</federatedRepository>

Modification des ressources

Pour modifier les ressources, il est nécessaire d'envoyer une demande PUT au noeud final de ressource, en l'occurrence /Users ou /Groups. Une demande PUT effectue une mise à jour complète de la ressource. Les attributs qui ne sont pas spécifiés en entrée sont supprimés.
Remarque : Les mises à jour partielles avec PATCH ne sont pas prises en charge.
Pour modifier la ressource préalablement créée, il est nécessaire de publier la demande suivante à l'adresse https://localhost:9090/ibm/api/scim/Users/uid=bjensen,o=ibm,c=us.
Content-Type: application/json
Content-Length: ...

{
  "schemas":["urn:scim:schemas:core:1.0"],
  "userName":"bjensen",
  "externalId":"uid=bjensen,o=ibm,c=us",
  "name":{
    "familyName":"Jensen",
    "givenName":"Barb"
  }
}
Cette demande remplace le nom donné à l'objet, Barbara par Barb. L'ID spécifié dans l'URL doit correspondre à l'ID externalId spécifié dans l'objet utilisateur.
Pour modifier un groupe cn=employeeGroup,o=ibm,c=us et modifier l'appartenance au groupe, il est nécessaire de spécifier l'attribut de membre.
Content-Type: application/json
Content-Length: ...
{
    "id":"cn=employeeGroup,o=ibm,c=us",
    "schemas":["urn:scim:schemas:core:1.0"],
    "displayName":"employeeGroup",
    "externalId":"cn=employeeGroup,o=ibm,c=us",
    "members":[{"value":"uid=bjensen,o=ibm,c=us", "type":"User"},{"value":"cn=consultants,o=ibm,c=us", "type":"Group"}]
}
Pour modifier un groupe cn=employeeGroup,o=ibm,c=us et retirer tous les membres d'un groupe, il est nécessaire de spécifier un attribut de membre vide.
Content-Type: application/json
Content-Length: ...
{
    "id":"cn=employeeGroup,o=ibm,c=us",
    "schemas":["urn:scim:schemas:core:1.0"],
    "displayName":"employeeGroup",
    "externalId":"cn=employeeGroup,o=ibm,c=us",
    "members":[]
}

Suppression de ressources

Pour supprimer des ressources, il est nécessaire d'envoyer une demande DELETE au noeud final de ressource, en l'occurrence /Users ou /Groups. Par exemple, pour supprimer l'utilisateur uid=bjensen,o=ibm,c=us qui est créé dans l'exemple précédent, il est nécessaire d'envoyer une demande à https://localhost:9090/ibm/api/scim/Users/uid=bjensen,o=ibm,c=us
Remarque : SCIM s'exécute uniquement dans Java 7 ou supérieur.

Icône indiquant le type de rubrique Rubrique de référence

Nom du fichier : rwlp_sec_scim_operations.html