Configuration du provisionnement JIT SAML

Le provisionnement juste à temps (JIT) SAML automatise la création de compte utilisateur lorsque l'utilisateur commence par tenter de recourir à SSO alors qu'il n'existe pas encore dans le domaine d'identité. Outre la création automatique d'utilisateur, le provisionnement JIT SAML permet d'accorder et de révoquer des appartenances aux groupes dans le cadre du provisionnement. Le provisionnement JIT SAML peut être configuré pour mettre à jour les utilisateurs provisionnés afin que les attributs des utilisateurs dans la banque du fournisseur de services puissent rester synchronisés avec les attributs de la banque des utilisateurs du fournisseur d'identités (IdP).

Lors de la configuration du provisionnement JIT SAML, vous définissez la façon dont les données utilisateur envoyées par votre SAML IdP seront utilisées pour créer et/ou mettre à jour des utilisateurs dans votre domaine d'identité. Tout d'abord, vous créez et configurez une valeur SAML IdP pour SSO fédéré, puis vous activez et configurez les options de provisionnement JIT SAML pour cette valeur IdP.

Vous pouvez configurer le provisionnement JIT SAML uniquement à l'aide de l'adresse d'API REST /admin/v1/IdentityProviders.

Le tableau suivant décrit les attributs de configuration IdP pertinents pour le provisionnement JIT SAML. Pour plus d'informations sur l'utilisation de OAuth 2 pour accéder à l'API REST, reportez-vous à Accès à l'API REST à l'aide de OAuth 2.
Propriété IdentityProvider Description Exemple JSON
jitUserProvEnabled

Propriété booléenne permettant d'activer/de désactiver la fonctionnalité de provisionnement JIT SAML pour cette instance IdP.

Si cette propriété est true, au moins l'une des propriétés jitUserProvCreateUserEnabled ou jitUserProvAttributeUpdateEnabled doit également être true.
"jitUserProvEnabled": true,
jitUserProvCreateUserEnabled

Propriété booléenne indiquant si un utilisateur doit être créé, en fonction de l'assertion entrante, si l'utilisateur n'existe pas encore.

Par défaut, les utilisateurs créés à l'aide du provisionnement JIT SAML sont des utilisateurs "fédérés". Les utilisateurs fédérés ne disposent pas d'informations d'identification pour se connecter directement au domaine d'identité, mais doivent être authentifiés par le fournisseur d'identités externe. Vous pouvez modifier le statut fédéré d'un utilisateur à l'aide de la console d'administration et en mettant à jour l'attribut isFederatedUser à l'aide de l'API REST. Par exemple, vous pouvez modifier le statut fédéré des utilisateurs disposant de privilèges d'administrateur afin qu'ils puissent se connecter directement à la console. Si vous préférez que tous les utilisateurs créés à l'aide du provisionnement JIT SAML soient créés en tant qu'utilisateurs non fédérés (créés avec un mot de passe de connexion de domaine d'identité), définissez isFederatedUser=false dans la configuration des correspondances d'attributs JIT. Reportez-vous à attributeMappings dans le tableau ci-dessous.

"jitUserProvCreateUserEnabled": true,
jitUserProvAttributeUpdateEnabled

Propriété booléenne indiquant si les attributs de l'utilisateur doivent être mis à jour, en fonction de l'assertion entrante, si l'utilisateur existe déjà.

"jitUserProvAttributeUpdateEnabled": true,
jitUserProvAttributes

Il s'agit d'une référence à un objet MappedAttributes, qui définit la mise en correspondance des valeurs d'attribut d'assertion SAML IdP avec les attributs utilisateur de domaine d'identité, pour la création d'utilisateur dynamique et les mises à jour d'attribut utilisateur. (Défini lors de la création de IdentityProvider, ne mettez pas à jour cette référence.)

Reportez-vous ci-dessous pour plus de détails sur l'utilisation de jitUserProvAttributes de la ressource MappedAttributes.

jitUserProvGroupAssertionAttributeEnabled

Propriété booléenne indiquant si les appartenances aux groupes doivent être affectées à l'utilisateur en fonction d'une liste de noms de groupe reçus de IdP dans un attribut SAML.

Si cette propriété est true, la propriété jitUserProvGroupSAMLAttributeName doit être définie.

"jitUserProvGroupAssertionAttributeEnabled": true,
jitUserProvGroupMappingMode

Propriété de chaîne qui contrôle la façon dont les groupes dans IdP sont mis en correspondance avec ceux du domaine d'identité. La valeur doit être l'une des suivantes :

explicite : les groupes IdP sont explicitement mis en correspondance avec les groupes du domaine d'identité à l'aide de la propriété de configuration jitUserProvGroupMappings.

implicite : les noms de groupe dans l'assertion SAML doivent correspondre aux noms de groupe dans le domaine d'identité.

La valeur par défaut est explicite si aucune valeur n'est spécifiée.

"jitUserProvGroupMappingMode": "explicit",
jitUserProvGroupMappings

Tableau de correspondances entre les groupes de l'assertion IdP et les groupes du domaine d'identité.

Chaque objet du tableau représente un mappage entre un groupe IdP et un groupe de domaines d'identité.

idpGroup est l'identificateur de groupe dans l'assertion IdP et value est l'identificateur de groupe dans le domaine d'identité.

Le nombre maximal de mappages de groupe par IdP est de 250.

Remarque :

Lorsque vous utilisez le provisionnement juste à temps (JIT) SAML avec le mapping de groupe pour affecter ou enlever des autorisations de groupe pour un utilisateur, sachez que les modifications apportées à l'appartenance à un groupe peuvent ne pas être reflétées immédiatement. Cela est dû à la cohérence éventuelle, en particulier lors de l'accès aux fonctionnalités qui s'appuient sur le plan de données Identity, telles que la console OCI. Par conséquent, il peut y avoir un délai avant que les affectations ou les suppressions d'utilisateurs ne soient entièrement propagées aux groupes concernés. Les temps de propagation peuvent être plus longs pour les scénarios inter-région.


		"jitUserProvGroupMappings": [
   {
     "idpGroup": "7e18e37e-1b2f-46d9-9d9c-6df136570b27",
     "value": "4bce9b677ab447f18b65ba7bf9a61c21"
   },
   {
     "idpGroup": "cf6f7594-d454-40ac-971b-07cf0627ca17",
     "value": "6d8448a643b94b268d986e9d31e20cbc"
   }
 ]
jitUserProvGroupSAMLAttributeName

Nom de l'attribut d'assertion SAML qui contiendra les groupes à affecter à l'utilisateur, si la propriété jitUserProvGroupAssertionAttributeEnabled est true.

L'attribut d'assertion peut comprendre les éléments suivants :
  • un élément de valeur dʼattribut unique, contenant une liste de noms de groupe séparés par des virgules ; ou
  • plusieurs éléments AttributeValue, chacun avec un seul nom de groupe.
"jitUserProvGroupSAMLAttributeName": "FederatedGroups",
jitUserProvGroupStaticListEnabled

Propriété booléenne indiquant si les appartenances aux groupes doivent être affectées à l'utilisateur en fonction d'une liste statique de noms de groupe.

Si cette propriété est true, la propriété jitUserProvAssignedGroups doit être définie.

"jitUserProvGroupStaticListEnabled": true,
jitUserProvAssignedGroups

Tableau de groupes à affecter à l'utilisateur, en plus des valeurs reçues dans l'assertion SAML, si la propriété jitUserProvGroupStaticListEnabled est true.

Remarque : les valeurs définies dans ce tableau sont des ID de groupe (et non des noms de groupe).

"jitUserProvAssignedGroups": 
[
{"value": "21f273857a304684a8f7e353e452a2e1"},
{"value": "1962687f74b84121b69c5560769e8b06"}
],
jitUserProvGroupAssignmentMethod

Propriété de chaîne qui contrôle la façon dont les appartenances aux groupes seront affectées à l'utilisateur dans le domaine d'identité. La valeur doit être l'une des suivantes :

  • Overwrite : remplacez toutes les appartenances de groupe de l'utilisateur par celles reçues dans l'assertion SAML et/ou configurées de manière statique ici.
  • Merge : ajoute aux appartenances de groupe existantes de l'utilisateur celles implicitement mises en correspondance à partir de l'assertion SAML et/ou configurées de manière statique ici. Les groupes explicitement mappés sont toujours écrasés/remplacés par les valeurs d'assertion SAML. Remarque : lors de l'utilisation de l'option de fusion, si vous enlevez un utilisateur de IdP, vous devez également l'enlever du domaine d'identité. Les droits d'accès ne sont pas automatiquement enlevés du domaine d'identité.
"jitUserProvGroupAssignmentMethod": "Merge",
jitUserProvIgnoreErrorOnAbsentGroups

Propriété booléenne qui détermine l'action à effectuer lorsque l'attribut d'assertion entrant indique un groupe qui n'existe pas ou un groupe pour lequel aucune correspondance de groupe n'existe dans le domaine d'identité.

Si cette propriété a la valeur True, le groupe manquant est ignoré et l'utilisateur est créé.

Si cette propriété est fausse et qu'un groupe inexistant est spécifié, la création de l'utilisateur échouera.

La valeur par défaut est True pour le mode explicit et False pour le mode implicit spécifié à l'aide de jitUserProvGroupMappingMode.

"jitUserProvIgnoreErrorOnAbsentGroups": true,

Configuration du mapping jitUserProvAttributes

Une fois que IdentityProvider a été créé et que les attributs de provisionnement JIT SAML ont été configurés, la ressource jitUserProvAttributes doit être mise à jour pour ajouter vos correspondances d'attributs entrantes. La ressource MappedAttributes, référencée par jitUserProvAttributes, est automatiquement créée et supprimée avec la ressource IdentityProvider, et cette propriété est marquée comme non mutable. Les correspondances d'attributs de provisionnement JIT SAML sont configurées en mettant à jour l'objet MappedAttributes existant, et non en le remplaçant.

Le tableau suivant décrit les propriétés MappedAttributes utilisées par le provisionnement JIT SAML.
Propriété MappedAttributes Description Exemples JSON
attributeMappings
Liste des correspondances entre les attributs d'assertion SAML et les attributs utilisateur du domaine d'identité. Chaque mapping se compose des éléments suivants :
  • idcsAttributeName : expression définissant le chemin de l'attribut utilisateur auquel une valeur entrante doit être affectée. Les expressions suivent la syntaxe SCIM, telle qu'utilisée par la fonctionnalité de synchronisation utilisateur des domaines d'identité. L'expression indiquée pour cet attribut est validée par rapport au schéma User.
  • managedObjectAttributeName : expression de stratégie définissant la valeur à mettre en correspondance avec l'attribut utilisateur. Il peut s'agir de valeurs telles que $(assertion.firstname) pour faire référence à un attribut d'assertion appelé "firstname", ou d'un littéral de chaîne statique ou d'une fonction.

Remarque : les noms d'attribut d'assertion SAML sont sensibles à la casse.

"attributeMappings":[
{
"idcsAttributeName": "userName",
"managedObjectAttributeName": "$(assertion.mail)"
},
{
"idcsAttributeName": "name.givenName",
"managedObjectAttributeName": "$(assertion.firstname)"
},
{
"idcsAttributeName": "name.familyName", 
"managedObjectAttributeName": "$(assertion.lastname)" 
}, 
{ 
"idcsAttributeName": "emails[primary eq true and type eq \"work\"].value", 
"managedObjectAttributeName": "$(assertion.mail)" 
}, 
{ 
 "idcsAttributeName": "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User:isFederatedUser", 
"managedObjectAttributeName": "#toBoolean(\"false\")"
}, 
{
"idcsAttributeName":
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:Organization",
"managedObjectAttributeName": "ACME Corporation"}, 
{ 
"idcsAttributeName": "externalId", 
"managedObjectAttributeName":
"#concat(\"ACME/\",$(assertion.fed.nameidvalue))" 
}
],
refResourceType

Nom de la ressource qui utilise/a une référence à cet attribut mis en correspondance (toujours IdentityProvider dans le cas du provisionnement JIT SAML, ne pas mettre à jour).

"refResourceType": "IdentityProvider",
idcsResourceType

Type de la ressource de domaine d'identité avec laquelle nous sommes en correspondance (toujours User dans le cas du provisionnement JIT SAML, ne pas mettre à jour).

"idcsResourceType": "User",
direction

Direction de la mise en correspondance, par rapport à la ressource de domaine d'identité en question (toujours inbound dans le cas du provisionnement JIT SAML, ne pas mettre à jour).

"direction": "inbound",
refResourceID

ID de la ressource IdentityProvider qui contient une référence à cette ressource MappedAttribute (définie lors de la création, ne pas mettre à jour).

"refResourceID": "<IDP Resource ID>",

Pour mettre à jour les correspondances d'attributs, vous devez d'abord identifier la ressource MappedAttributes correcte pour votre ressource IdP. Pour ce faire, extrayez la ressource IdentityProvider et examinez l'attribut $ref de la propriété jitUserProvAttributes.

Par exemple, vous pouvez disposer d'une ressource MappedAttributes telle que https://<domainURL>/admin/v1/MappedAttributes/6533d475754845a8b0e971c48b87edda, que vous devez ensuite PATCH pour mettre à jour sa propriété attributeMappings.

Exemple de charge utile PATCH pour MappedAttributes


{
 "schemas": [
     "urn:ietf:params:scim:api:messages:2.0:PatchOp"
 ],    "Operations": [
     {
         "op": "replace",
         "path": "attributeMappings",
         "value": [
             {
                 "managedObjectAttributeName": "$(assertion.mail)",
                 "idcsAttributeName": "userName"
             },
             {
                 "managedObjectAttributeName": "$(assertion.firstname)",
                 "idcsAttributeName": "name.givenName"
             },
             {
                 "managedObjectAttributeName": "$(assertion.lastname)",
                 "idcsAttributeName": "name.familyName"
             },
             {
                 "managedObjectAttributeName": "$(assertion.mail)",
                 "idcsAttributeName": "emails[primary eq true and type eq \"work\"].value"
             }
         ]
     }
 ]
}

Utilisation et comportement d'exécution de la correspondance d'attributs de provisionnement JIT SAML

Si les valeurs de userName, name.givenName et name.familyName ne sont pas présentes, une erreur est générée lors de l'exécution, car ces attributs sont marqués comme obligatoires dans le schéma User. Il en va de même pour l'adresse électronique principale, sauf si le locataire a été configuré pour rendre cette option facultative.

Lors de l'exécution, si une valeur d'attribut d'assertion ne peut pas être convertie en un type de données pouvant être affecté à l'attribut utilisateur auquel elle est mise en correspondance, une erreur survient et SSO échoue.

Si plusieurs correspondances d'attributs sont configurées ciblant le même attribut utilisateur de domaines d'identité, elles sont évaluées et exécutées dans l'ordre des positions, et seul le résultat du dernier mapping est conservé.

Un attribut d'assertion entrant qui ne contient aucune valeur entraîne la suppression de la valeur de l'attribut utilisateur de domaines d'identité mis en correspondance, si jitUserProvAttributeUpdateEnabled est true.

Les attributs d'assertion SAML Emetteur et Objet NameID sont pris en charge, même s'ils n'apparaissent pas dans AttributeStatement. Ils peuvent être mis en correspondance à l'aide des expressions réservées suivantes :
  • ${assertion.fed.issuerid)
  • $(assertion.fed.nameidvalue)
Certains attributs de schéma de compte/utilisateur de domaines d'identité ne sont pas autorisés à être utilisés dans le provisionnement JIT SAML :
  • Attributs sensibles : attributs marqués "idcsSensitive: hash" ou "idcsSensitive: encrypt" dans le schéma
  • Attributs marqués "idcsInternal: true" dans le schéma
  • Attributs : readOnly
  • Tous les attributs que la synchronisation utilisateur n'autorise pas

Lorsqu'un utilisateur est créé à l'aide du provisionnement JIT SAML, les attributs suivants sont définis. Les attributs suivants ne sont pas configurables :

  • bypassNotification : true : par exemple, aucun courriel d'activation de compte ne sera envoyé à l'utilisateur nouvellement créé.
  • syncedFromApp : référence à la ressource de fournisseur d'identités correspondant à l'émetteur de l'assertion SAML entrante.
Lorsqu'un utilisateur est créé à l'aide du provisionnement JIT SAML, l'attribut isFederatedUser est défini sur true par défaut. Vous pouvez modifier ce comportement en définissant l'attribut isFederatedUser sur false dans la configuration attributeMappings du provisionnement JIT SAML.
Remarque

Ce comportement par défaut (isFederatedUser = true) s'applique uniquement à la création d'utilisateur et non à la mise à jour d'utilisateur. La configuration attributeMappings s'applique à la fois à la création d'utilisateur et à la mise à jour d'utilisateur.

Foire aux questions

Q : Est-il obligatoire pour les groupes d'être présents dans les domaines d'identité de mettre à jour l'appartenance aux groupes lors du provisionnement JIT SAML ?

R : Oui. Les groupes doivent être synchronisés ou créés manuellement dans les domaines d'identité avant la mise à jour de l'appartenance au groupe. Le provisionnement JIT SAML ne créera pas de groupes à la volée.

Q : Puis-je mettre en correspondance un littéral dans la mise en correspondance d'attributs ? Par exemple, je veux mettre en correspondance isFederatedUser = true lors de la création de l'utilisateur ?

R : Oui.

Question : La mise en correspondance d'attributs prend-elle en charge les attributs à valeurs multiples ? Si oui, appliquons-nous un patch à la charge utile ou faisons-nous un remplacement ?

R : Oui. Toutes les valeurs de l'attribut utilisateur de domaine d'identité sont remplacées par le résultat net du mappage d'attribut de provisionnement JIT SAML.

Q : Si un utilisateur est enlevé d'un groupe dans IdP, comment le gérer ? Que se passe-t-il si ce groupe est affecté manuellement dans les domaines d'identité ? Pouvons-nous configurer un comportement de remplacement ou de patch ?

R : L'affectation de groupe à l'aide de la mise à jour de provisionnement JIT SAML peut être configurée pour avoir un comportement de fusion ou de remplacement, pour l'ensemble des affectations de groupe de l'utilisateur. Par exemple, si la mise à jour est configurée pour l'écrasement, toutes les affectations de groupe manuelles qui n'apparaissent pas dans l'assertion IdP seront enlevées.

Q : Pouvons-nous configurer le provisionnement JIT SAML pour qu'il se produise uniquement lors de la création de l'utilisateur, mais pas pour qu'il soit mis à jour ultérieurement ?

R : Oui. Si jitUserProvCreateUserEnabled a la valeur True et que jitUserProvAttributeUpdateEnabled a la valeur False, le provisionnement JIT SAML créera des utilisateurs s'ils sont manquants, mais ne les mettra pas à jour lors des connexions suivantes.