Configuración del aprovisionamiento de JIT de SAML

El aprovisionamiento just in time (JIT) de SAML automatiza la creación de cuentas de usuario cuando el usuario intenta realizar el SSO por primera vez y el usuario aún no existe en el dominio de identidad. Además de la creación automática de usuarios, el aprovisionamiento de JIT de SAML permite otorgar y revocar afiliaciones de grupos como parte del aprovisionamiento. El aprovisionamiento de JIT de SAML se puede configurar para actualizar los usuarios aprovisionados de modo que los atributos de usuarios en el almacén del proveedor de servicio (SP) se puedan mantener sincronizados con los atributos del almacén de usuarios del Proveedor de identidad (IdP).

Al configurar el aprovisionamiento de JIT de SAML, defina cómo se utilizarán los datos de usuario enviados por el IdP de SAML para crear y/o actualizar usuarios en el dominio de identidad. En primer lugar, cree y configure un SAML IdP para SSO federado y, a continuación, active y configure las opciones de aprovisionamiento de JIT de SAML para ese IdP.

El aprovisionamiento de JIT para SAML solo se puede configurar mediante el punto final /admin/v1/IdentityProviders de API REST.

En la siguiente tabla se describen los atributos de configuración IdP relevantes para el aprovisionamiento de JIT de SAML. Para obtener información sobre el uso de OAuth 2 para acceder a la API de REST, consulte Uso de OAuth 2 para acceder a la API de REST.
Propiedad IdentityProvider Descripción Ejemplo de JSON
jitUserProvEnabled

Propiedad booleana para activar/desactivar la función de aprovisionamiento de JIT de SAML para esta IdP.

Si esta propiedad es true, al menos uno de los valores jitUserProvCreateUserEnabled o jitUserProvAttributeUpdateEnabled también debe ser true.
"jitUserProvEnabled": true,
jitUserProvCreateUserEnabled

Propiedad booleana que indica si se debe crear un usuario, en función de la afirmación entrante, si el usuario aún no existe.

Por defecto, los usuarios creados mediante el aprovisionamiento de JIT de SAML son usuarios "federados". Los usuarios federados no tienen credenciales para conectarse directamente al dominio de identidad, sino que deben ser autenticados por el proveedor de identidad externo. El estado federado de un usuario se puede cambiar mediante la consola de administración y mediante la actualización del atributo isFederatedUser mediante la API de REST. Por ejemplo, puede que desee cambiar el estado federado de los usuarios con privilegios de administrador para que puedan conectarse directamente a la consola. Si prefiere que todos los usuarios creados mediante el aprovisionamiento de JIT de SAML se creen como usuarios no federados (creados con una contraseña de conexión de dominio de identidad), defina isFederatedUser=false en la configuración de asignaciones de atributos de JIT. Véase attributeMappings en el cuadro que figura a continuación.

"jitUserProvCreateUserEnabled": true,
jitUserProvAttributeUpdateEnabled

Propiedad booleana que indica si los atributos del usuario se deben actualizar, en función de la afirmación entrante, si el usuario ya existe.

"jitUserProvAttributeUpdateEnabled": true,
jitUserProvAttributes

Se trata de una referencia a un objeto MappedAttributes, que define la asignación de los valores de atributo de afirmación de SAML IdP a los atributos de usuario del dominio de identidad, tanto para la creación dinámica de usuarios como para las actualizaciones de atributos de usuario. (Definido al crear IdentityProvider, no actualice esta referencia.)

Consulte a continuación los detalles del uso de jitUserProvAttributes del recurso MappedAttributes.

jitUserProvGroupAssertionAttributeEnabled

Propiedad booleana que indica si las afiliaciones a grupos se deben asignar al usuario en función de una lista de nombres de grupo recibidos de IdP en un atributo SAML.

Si esta propiedad es true, se debe definir la propiedad jitUserProvGroupSAMLAttributeName.

"jitUserProvGroupAssertionAttributeEnabled": true,
jitUserProvGroupMappingMode

Propiedad de cadena que controla cómo se asignan los grupos en IdP a los del dominio de identidad. El valor debe ser uno de los siguientes:

explicit: los grupos IdP se asignan explícitamente a los grupos del dominio de identidad mediante la propiedad de configuración jitUserProvGroupMappings.

implícito: los nombres de grupo de la afirmación de SAML deben coincidir con los nombres de grupo del dominio de identidad.

El valor predeterminado es explicit si no se especifica ningún valor.

"jitUserProvGroupMappingMode": "explicit",
jitUserProvGroupMappings

Matriz de asignaciones entre grupos en la afirmación IdP y grupos en el dominio de identidad.

Cada objeto de la matriz representa una asignación entre un grupo IdP y un grupo de dominios de identidad.

idpGroup es el identificador de grupo en la afirmación IdP y value es el identificador de grupo en el dominio de identidad.

El número máximo de asignaciones de grupo por IdP es 250.

Nota:

Al utilizar el aprovisionamiento Just-In-Time (JIT) de SAML con la asignación de grupos para asignar o eliminar permisos de grupo para un usuario, tenga en cuenta que los cambios en la pertenencia al grupo pueden no reflejarse inmediatamente. Esto se debe a la consistencia eventual, especialmente al acceder a funciones que se basan en el plano de datos de identidad, como la consola de OCI. Como resultado, puede haber un retraso antes de que las asignaciones o eliminaciones de usuarios se propaguen por completo a los grupos relevantes. Los tiempos de propagación pueden ser más largos para escenarios entre regiones.


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

Nombre del atributo de afirmación de SAML que contendrá los grupos que se asignarán al usuario, si la propiedad jitUserProvGroupAssertionAttributeEnabled es true.

El atributo de afirmación puede incluir:
  • un único elemento Attribute Value, que contiene una lista separada por comas de nombres de grupo; o
  • varios elementos AttributeValue, cada uno con un único nombre de grupo.
"jitUserProvGroupSAMLAttributeName": "FederatedGroups",
jitUserProvGroupStaticListEnabled

Propiedad booleana que indica si las afiliaciones a grupos se deben asignar al usuario en función de una lista estática de nombres de grupos.

Si esta propiedad es true, se debe definir la propiedad jitUserProvAssignedGroups.

"jitUserProvGroupStaticListEnabled": true,
jitUserProvAssignedGroups

Matriz de grupos que se asignarán al usuario, además de los valores recibidos en la afirmación de SAML, si la propiedad jitUserProvGroupStaticListEnabled es true.

Nota: Los valores definidos en esta matriz son ID de grupo (no nombres de grupo).

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

Propiedad String que controla cómo se asignarán las afiliaciones a grupos al usuario en el dominio de identidad. El valor debe ser uno de los siguientes:

  • Overwrite: sustituye todas las afiliaciones a grupos del usuario por las recibidas en la afirmación de SAML y/o configuradas estáticamente aquí.
  • Merge: agregue a las afiliaciones de grupo existentes del usuario las asignadas implícitamente desde la afirmación de SAML y/o configuradas estáticamente aquí. Los grupos asignados explícitamente siempre se sobrescriben/sustituyen con los valores de afirmación de SAML. Nota: Al utilizar la opción de fusión, si elimina un usuario de IdP, también debe eliminar el usuario del dominio de identidad. Los permisos no se eliminan automáticamente del dominio de identidad.
"jitUserProvGroupAssignmentMethod": "Merge",
jitUserProvIgnoreErrorOnAbsentGroups

Propiedad booleana que determina la acción que se debe realizar cuando el atributo de afirmación entrante especifica un grupo que no existe o un grupo para el que no existe una asignación de grupo en el dominio de identidad.

Si esta propiedad es verdadera, el grupo que falta se ignora y se crea el usuario.

Si esta propiedad es false y se especifica un grupo inexistente, la creación del usuario fallará.

El valor predeterminado es true para el modo explicit y false para el modo implicit especificado mediante jitUserProvGroupMappingMode.

"jitUserProvIgnoreErrorOnAbsentGroups": true,

Configuración de la asignación jitUserProvAttributes

Después de crear IdentityProvider y de configurar los atributos de aprovisionamiento de JIT de SAML según sea necesario, se debe actualizar el recurso jitUserProvAttributes para agregar las asignaciones de atributos de entrada. El recurso MappedAttributes, al que hace referencia jitUserProvAttributes, se crea y suprime automáticamente con el recurso IdentityProvider y esta propiedad se marca como inmutable. Las asignaciones de atributos de aprovisionamiento de JIT de SAML se configuran mediante la actualización del objeto MappedAttributes existente, no mediante su sustitución.

En la siguiente tabla se describen las propiedades MappedAttributes que utiliza el aprovisionamiento de JIT de SAML.
Propiedad MappedAttributes Descripción Ejemplos de JSON
attributeMappings
Lista de asignaciones entre los atributos de afirmación de SAML y los atributos de usuario del dominio de identidad. Cada asignación consta de:
  • idcsAttributeName: expresión que define la ruta de acceso al atributo de usuario al que se debe asignar un valor entrante. Las expresiones siguen la sintaxis de SCIM, tal como la utiliza la función de sincronización de usuarios de los dominios de identidad. La expresión proporcionada para este atributo se valida con respecto al esquema User.
  • managedObjectAttributeName: expresión de política que define el valor que se va a asignar al atributo de usuario. Puede tener valores como $(assertion.firstname) para hacer referencia a un atributo de afirmación denominado "firstname", o puede ser un literal de cadena estática o una función.

Nota: Los nombres de atributo de afirmación de SAML son sensibles a mayúsculas/minúsculas.

"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

Nombre del recurso que está utilizando/tiene una referencia a este atributo asignado (siempre IdentityProvider en caso de aprovisionamiento de JIT de SAML, no actualice).

"refResourceType": "IdentityProvider",
idcsResourceType

Tipo del recurso de dominio de identidad al que estamos asignando (siempre User en el caso del aprovisionamiento de JIT de SAML, no se actualiza).

"idcsResourceType": "User",
direction

Dirección de la asignación, con respecto al recurso de dominio de identidad en cuestión (siempre inbound en el caso del aprovisionamiento de JIT de SAML, no se actualice).

"direction": "inbound",
refResourceID

ID del recurso IdentityProvider que tiene una referencia a este recurso MappedAttribute (definido en la creación, no actualizar).

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

Para actualizar las asignaciones de atributos, primero debe identificar el recurso MappedAttributes correcto para IdP. Para ello, se puede recuperar el recurso IdentityProvider y consultar el atributo $ref de la propiedad jitUserProvAttributes.

Por ejemplo, puede tener un recurso MappedAttributes, como https://<domainURL>/admin/v1/MappedAttributes/6533d475754845a8b0e971c48b87edda, que, a continuación, debería aplicar PATCH para actualizar su propiedad attributeMappings.

Carga útil de PATCH de muestra para 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"
             }
         ]
     }
 ]
}

Uso y Comportamiento de Tiempo de Ejecución de Asignación de Atributos de Provisionamiento de JIT de SAML

Si los valores para userName, name.givenName y name.familyName no están presentes, se produce un error en tiempo de ejecución, ya que esos atributos se marcan como necesarios en el esquema User. Lo mismo ocurre con la dirección de correo electrónico principal, a menos que el inquilino se haya configurado para que sea opcional.

En tiempo de ejecución, si algún valor de atributo de afirmación no se puede convertir en un tipo de datos que se puede asignar al atributo de usuario al que está asignado, se producirá un error y SSO fallará.

Si se configuran varias asignaciones de atributos con el mismo atributo de usuario de dominios de identidad, se evalúan y ejecutan en orden de posición y solo se retiene el resultado de la última asignación.

Un atributo de afirmación entrante que no contenga valores provocará la eliminación del valor del atributo de usuario de los dominios de identidad asignados correspondientes, si jitUserProvAttributeUpdateEnabled es true.

Los atributos de afirmación SAML Emisor y Asunto NameID están soportados, aunque no aparezcan en AttributeStatement. Se pueden asignar mediante estas expresiones reservadas:
  • ${assertion.fed.issuerid)
  • $(assertion.fed.nameidvalue)
Algunos atributos de esquema de usuario/cuenta de dominios de identidad no están permitidos para su uso en el aprovisionamiento de JIT de SAML:
  • Atributos confidenciales: es decir, atributos marcados como "idcsSensitive: hash" o "idcsSensitive: encrypt" en el esquema
  • Atributos que están marcados como "idcsInternal: true" en el esquema
  • Atributos que son readOnly
  • Todos los atributos que la sincronización de usuario no permite

Cuando se crea un usuario mediante el aprovisionamiento de JIT de SAML, se definirán los siguientes atributos. Estos atributos no se pueden configurar:

  • bypassNotification : true: por ejemplo, no se enviará un correo electrónico de activación de cuenta al usuario recién creado.
  • syncedFromApp: referencia al recurso de proveedor de identidad correspondiente al emisor de la afirmación de SAML entrante.
Cuando se crea un usuario mediante el aprovisionamiento de JIT de SAML, el atributo isFederatedUser se define en true por defecto. Este comportamiento se puede cambiar definiendo el atributo isFederatedUser en false en la configuración de attributeMappings de aprovisionamiento de JIT de SAML.
Nota

Este comportamiento por defecto (isFederatedUser = true) se aplica solo a la creación de usuarios, no a la actualización de usuarios; la configuración attributeMappings se aplica tanto a la creación de usuarios como a la actualización de usuarios.

Preguntas frecuentes

P: ¿Es obligatorio que los grupos estén presentes en los dominios de identidad para actualizar la pertenencia al grupo durante el aprovisionamiento de JIT de SAML?

Respuesta: sí. Los grupos se deben sincronizar o crear manualmente en los dominios de identidad antes de actualizar la pertenencia al grupo. El aprovisionamiento de JIT de SAML no creará grupos sobre la marcha.

P: ¿Puedo asignar un literal en la asignación de atributos? Por ejemplo, ¿desea asignar isFederatedUser = true durante la creación del usuario?

Respuesta: sí.

P: ¿Soportamos atributos de varios valores en la asignación de atributos? En caso afirmativo, ¿se aplica un parche a la carga útil o se realiza una sustitución?

Respuesta: sí. Todos los valores del atributo de usuario del dominio de identidad se sustituyen por el resultado neto de la asignación de atributos de aprovisionamiento de JIT de SAML.

P: Si se elimina un usuario de un grupo en IdP, ¿cómo lo gestionamos? ¿Qué ocurre si ese grupo se asigna manualmente en los dominios de identidad? ¿Podemos configurar el comportamiento de sustitución frente a parche?

R: La asignación de grupo mediante la actualización de aprovisionamiento de JIT de SAML se puede configurar para que tenga un comportamiento de fusión o sobrescritura, para las asignaciones de grupo del usuario en general. Por ejemplo, si la actualización está configurada para sobrescribir, cualquier asignación de grupo manual que no aparezca en la afirmación IdP se eliminará.

P: ¿Podemos configurar el aprovisionamiento de JIT de SAML para que se produzca solo durante la creación del usuario, pero no para actualizar el usuario más tarde?

Respuesta: sí. Si jitUserProvCreateUserEnabled es verdadero y jitUserProvAttributeUpdateEnabled es falso, el aprovisionamiento de JIT de SAML creará usuarios si faltan, pero no los actualizará en los inicios de sesión posteriores.