Opérations SCIM dans le profil 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}.
<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
- 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”.
- 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":"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.
{
"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"
}
}
<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":"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. 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"}]
}
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":[]
}