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}.
<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
- 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.
- 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
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.
{
"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"
}
}
<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
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. 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"}]
}
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":[]
}