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é. Voir l'exemple suivant : /Users/{id} or /Groups/{id}.

De plus, l'exemple suivant illustre les opérations effectuées 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 :
  • Spécifiez le paramètre permettant d'extraire un sous-ensemble des valeurs. Par exemple : https://localhost:9090/ibm/api/scim/Users?filter=givenname sw "Jo" extrait tous les utilisateurs dont le nom commence par Jo.
  • Spécifiez le paramètre d'attributs pour extraire un 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 de courrier électroniques du nom d'utilisateur commençant par Jo et dont le nom de famille est Smith.
  • Indiquez les paramètres paging et sorting afin d'extraire les ressources organisées. Par 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é, chaque page contenant cinq noms d'utilisateurs 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":"jdoe",
  "externalId": "uid=jdoe,o=ibm,c=us",
  "name":{
    "familyName":"Doe",
    "givenName":"Jane"
  }
}

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 de l'utilisateur est définie sur UID, de sorte que externalId devient uid=jdoe,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=jdoe,o=ibm,c=us",
    "userName":"jdoe",
    "externalId":"uid=jdoe,o=ibm,c=us",
    "name":{
          "formatted":"Jane Doe",
          "familyName":"Doe",
          "givenName":"Jane"
    },
    "meta":{
         "lastModified":"2015-09-15T14:30:11",        "location":"https:\\localhost:9090\ibm\api\scim\Users\uid=jdoe,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=jdoe,o=ibm,c=us.
Content-Type: application/json
Content-Length: ...

{
  "schemas":["urn:scim:schemas:core:1.0"],
  "userName":"jdoe",
  "externalId":"uid=jdoe,o=ibm,c=us",
  "name":{
    "familyName":"Doe",
    "givenName":"Janet"
  }
}
Cette demande remplace le nom donné à l'obje, Jane, par Janet. 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=jdoe,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=jdoe,o=ibm,c=us créé dans l'exemple précédent, envoyez une demande à https://localhost:9090/ibm/api/scim/Users/uid=jdoe,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