Header Ads Widget

Ticker

6/recent/ticker-posts

Gestión de usuarios estandarizada con SCIM


 Introducción al sistema para la gestión de identidades entre dominios (SCIM)

¿Qué es SCIM?

SCIM

SCIM significa "Sistema para la gestión de identidades entre dominios" y es, en primer lugar, una forma estandarizada de representar usuarios, grupos y todo lo relacionado. En segundo lugar, SCIM ayuda a estandarizar métodos para actuar sobre estos datos, como crear, consultar, buscar, actualizar y eliminar. En otras palabras, es un modelo de API .

Estas dos partes de SCIM se dividen en dos estándares: un esquema central ( RFC7643 ) que controla cómo se modelan los datos y un protocolo para interactuar con los datos ( RFC7644 ).

Pero, ¿por qué importan los estándares, como SCIM?

Esto-es-un-sistema-Unix-yo-sé-esto

Esta imagen es de la película de gran éxito Jurassic Park (1993). Probablemente se esté preguntando qué importancia tiene esto. Bueno, en esta película los personajes son perseguidos por velociraptores a una habitación, pero desafortunadamente no pueden cerrar las puertas porque están controladas por un sistema informático. Todo el mundo entra en pánico, hasta que esta chica descubre que el sistema informático que controla las puertas es un sistema UNIX , que es un estándar con el que está familiarizada.

Gracias a este estándar logró cerrar las puertas y sobrevivir, ¡y por eso los estándares son tan importantes! El código no solo debería funcionar bien, también debería ser fácil de mantener , agregar y depurar . El uso de estándares abiertos hace que el código sea comprensible para todos los desarrolladores.

Los estándares aún pueden ser aterradores , complejos, demasiado diseñados y / o aburridos. Sin embargo, con SCIM, todos los datos se representan como JSON y el protocolo se basa en REST . Además, probablemente ya esté manejando usuarios, por lo que es muy probable que esté familiarizado con algunos aspectos de SCIM. Al final de este artículo, es de esperar que pueda ver SCIM y decir de manera similar "Lo sé".

Vea a Anders Eknert de Curity presente en la Platform Summit 2017:

Cómo implementar SCIM

SCIM no está destinado a reemplazar sus sistemas existentes para la administración de usuarios , sino más bien a actuar como una interfaz estándar sobre ellos. Estos pueden ser cualquier cosa, desde bases de datos SQL , LDAP , almacenes de datos NoSQL , SOAP o API REST . SCIM tiene muy pocos requisitos en cuanto a lo que se debe implementar. Por lo tanto, se recomienda implementar las características básicas y aquellas que tengan sentido para su empresa, y escalarlas cuando surja la necesidad.

Una gran ventaja de utilizar una interfaz estándar es que no es necesario documentar cada sistema por separado; si tiene una forma unificada para la gestión de usuarios, la documentación está en la especificación misma. Es importante tener en cuenta que la especificación SCIM se centra en lo que se necesita para la gestión de usuarios , no en la seguridad. Por lo tanto, cosas como cómo proteger el acceso a un sistema y los permisos para acceder a un sistema se dejan a otros estándares como OAuth .

Lea también: SCIM: Creación de la capa de identidad para Internet

Esquema: también conocido como "Los datos"

Recurso . En SCIM, todo se extiende desde el tipo de recurso y comparte un conjunto de atributos comunes. Probablemente ya esté familiarizado con este conjunto de atributos, ya que son comunes en casi todos los sistemas de administración de identidad. Todos los tipos de SCIM se identifican mediante el esquema en la carga útil, como el Useresquema siguiente:

  • id - Identificador único global
  • externalId- Identifica la fuente de los datos. Esto podría ser una identificación de su base de datos o un identificador de Twitter, dondequiera que haya obtenido el usuario o recurso originalmente
  • meta- Común metadata, como una marca de tiempo de cuándo se creó el recurso y lastModifieddónde puede encontrarlo, o la location(URL) del recurso dado.

A continuación, se muestra un recurso de ejemplo representado en JSON:

{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "2819c223-7f76-453a-413861904646",
"externalId": "701984",
"meta": {
	"resourceType": "User",
	"created": "2010-01-23T04:56:22Z",
	"lastModified": "2011-05-13T04:42:34Z",
	"location": "https://example/com/v2/Users/2819c223-7f76-4531-413861904646"
}
}

Otro beneficio de SCIM es que puede ampliar estos campos con sus propios esquemas o tipos de recursos.

Usuarios: como se encuentra en el punto final / Users

El concepto de usuario es fundamental en todos los sistemas de gestión de identidades, y SCIM, naturalmente, no es una excepción. El esquema central define un conjunto de atributos que deberían ser comunes para la mayoría de los usuarios, así como algunos que pueden no ser tan comunes.

Entonces, ¿qué es como usuario?

Dentro de casi todos los sistemas que manejan usuarios, encontramos algunos atributos comunes. Entre estos se encuentran:

  • Nombre de usuario
  • Nombres (nombre, apellido, etc.)
  • Contacto (números de teléfono, direcciones de correo electrónico)
  • Grupos
  • Locales (zona horaria, ubicación, etc.)
  • Contraseña (nunca visible en la carga útil, es decir, un atributo de "solo escritura")

Las contraseñas son un poco especiales en SCIM. Es un atributo manejado en el estándar, pero nunca puede ver una contraseña cuando solicita un recurso de usuario. Aún puede consultar y realizar la autenticación a través de SCIM, pero no puede obtener una lista de contraseñas o una contraseña para un usuario específico.

Los atributos menos comunes son cosas como redes sociales o identificadores de mensajería instantánea. Por ejemplo, ¡la especificación incluso menciona ICQ !

Grupo: como se encuentra en el punto final / Grupos

Los grupos no son realmente necesarios para la administración de usuarios, pero es bastante común, por lo que los incluiremos en este artículo. Los grupos en SCIM no son mucho más que un nombre y una lista de miembros.

Protocolo SCIM: trabajar con recursos

Estas partes del Protocolo SCIM también deberían ser bastante familiares, ya que todo está basado en REST:

  • GET: Obtiene un recurso existente, ya sea por ID o por búsqueda
  • POST: Enviar una solicitud de publicación al punto final del usuario crea un nuevo recurso
  • PUT: Reemplazar un recurso existente
  • PATCH: Actualiza los atributos de un recurso existente
  • DELETE: Elimina un recurso

Endpoints y búsqueda

Cada tipo de recurso se representa en un punto final con el nombre del tipo de recurso: usuarios debajo /Users, grupos debajo /Groups, etc.

Una GETsolicitud regular a uno de esos extremos enumera todos los recursos para ese tipo de recurso, pero naturalmente desea tener algunas limitaciones en las entradas, la paginación y la posición actual. Navegar es tan simple como pasar los parámetros de "paginación" (y, opcionalmente, ordenar) en la solicitud. También es posible mostrar (incluir / excluir) atributos específicos de interés.

{
	"totalResults": 100,
	"itemsPerPage": 10,
	"startIndex": 1,
	"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
	"Resource": [{
		
	}]
}

Cuando se usa GETpara recuperar información, a menudo no es ideal mostrar contraseñas o identificaciones personales en la URL. Si bien las GETsolicitudes son RESTful, expone parámetros en la URL. Agregar /.searcha la URL también permite buscar por POST, lo cual es ideal para datos sensibles como credenciales u otra información personal.

Búsqueda filtrada, consulta de recursos

Una de las características más poderosas de SCIM, y una de las más complejas, es la capacidad de enviar consultas filtradas. Por ejemplo, puedes decir /Users?filter=username eq “teddy", o en inglés: muéstrame todos los usuarios filtrados por el nombre de usuario igual a Teddy .

Ejemplos de POSTsolicitudes para /Users/.search:

/Users?filter=userName eq "teddy"
/Users?filter=emails.value ew "curity.io" and meta.lastModified lt "2017-01-01T00:00:00Z"
/Users?filter=name.familyName co "O'Malley"
/Users?filter=title pr
/Users?filter=filter=emails[type eq "work" and value co "@example.com"]
/Groups?filter=displayName eq "Curity" or displayName eq "Twobo"
/?filter=(meta.resourceType eq User) or (meta.resourceType eq Group)

Ejemplo de solicitud `GET`:

{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:SearchRequest"],
"filter": "userName eq \"teddy\" and password eq \"F&1!b90t111!\""
}

/ ServiceProviderConfig

Una especie de meta de SCIM es que también define lo que usted como proveedor de servicios apoya. Puede elegir usted mismo lo que quiere apoyar. El /ServiceProviderConfigpunto final es una forma de anunciar qué funciones son compatibles con el proveedor de servicios.

Si bien características como esta ciertamente agregan funcionalidad adicional dentro de contextos de nicho, no todas las características de SCIM tienen sentido para todas las implementaciones. Por ejemplo, anunciar funciones específicas de proveedores de servicios es un gran recurso para cualquiera que interactúe con su API SCIM .

SCIM-yo-sé-esto

"Yo se esto"

Con suerte, has encontrado valioso este artículo y ves que SCIM no es tan aterrador, al menos no tan aterrador como ser perseguido por dinosaurios. En el futuro, la imagen de arriba probablemente ilustra lo que dirá la próxima vez que se encuentre con un sistema SCIM.

Recursos adicionales:

  • Gestión de usuarios con SCIM en la práctica
  • Combinando SCIM junto con OAuth
  • Gestión de identidades impulsada por API

Publicar un comentario

0 Comentarios