Saltar a contenido

OpenID Connect

OpenID Connect (OIDC) es un estándar abierto que permite acceder con una única cuenta y perfil a múltiples servicios enlazados. Proporciona a la aplicación o servicio cliente información sobre el usuario, el contexto de su autenticación y acceso a la información de su perfil; de forma controlada. Incluso es posible pedir consentimiento expreso a la persona antes de compartir la información.

OIDC está basado en OAuth 2.0 y está orientado a simplificar el acceso para las personas que utilizan los servicios informáticos.

En OIDC, las aplicaciones cliente solicitan los conjuntos (scopes o ámbitos) de atributos (claims o declaraciones) que necesitan. Todas las aplicaciones pueden solicitar los scopes que estimen oportunos pero será la persona que utiliza el servicio quien dé su consentimiento para facilitar sus datos o no.

SIU utiliza el conjunto de scopes estándar de OIDC junto con algunos personalizados exclusivos de la UPM. Aunque se describen todos los posibles atributos, únicamente se proporcionarán los atributos que tengan valor.

Scope Personalizado Consentimiento Experimental
openid
profile
email
offline_access
academia_identifiers
academia_profile
edu_affiliation
upm_affiliation
upm_identifiers

Scopes estándar

La especificación de OIDC define una serie de scopes standard. Estos scopes están disponibles en SIU, aunque sólo se proporcionarán aquellos claims que tengan valor.

openid

El scope obligatorio openid proporciona un identificador inmutable, unidireccional, único y no reasignable de la cuenta.

claim Tipo Multivaluado Descripción
sub
(pairwise)
uuid El sujeto (subject) único para cada cliente.
Esta derivado de la tripleta usuario – emisor – sector siguiendo la especificación de OpenID y preserva la privacidad al impedir que sistemas no relacionados lo utilicen para correlación y perfilado de usuarios.
sub
(public)
uuid En situaciones excepcionales y previa justificación, una aplicación cliente podrá solicitar el sujeto (subject) global que es el mismo para todos los clientes y no preserva la privacidad.

Warning

Es obligatorio que la aplicación solicite el scope openid. En caso de omitirlo, el proceso de autenticación fallará.

Danger

La única forma de identificar unívocamente a una cuenta es usar el valor sub (subject) junto al valor iss (issuer) que se envía en el token.

El uso de cualquier otro atributo o combinación de atributos no garantiza la correcta identificación de la cuenta y nunca deben utilizarse con ese propósito.

profile

El scope opcional profile proporciona acceso a datos básicos de la persona que posee la cuenta:

claim Tipo Multivaluado Descripción
name string Nombre completo en formato visible, incluidas todas las partes del nombre, posiblemente títulos y sufijos, ordenados según la configuración regional y las preferencias personales.
given_name string Nombre propio o de pila.
En las culturas que utilizan varios nombres, se concatenarán todos usando espacios.
family_name string Apellidos.
En las culturas que utilizan varios apellidos, se concatenarán todos usando espacios.
En los casos que no se utilicen apellidos, este campo no se devolverá.
preferred_username string Nombre abreviado, que debe usarse para referenciar a la persona.
Este valor no tiene porqué ser único por lo que nunca debe utilizarse como identificador.
updated_at timestamp Hora de la última actualización de la información.
Se representa como el timestamp unix (número de segundos transcurridos desde el día 1 de enero de 1970).

email

El scope opcional email proporciona información sobre la dirección de correo preferida.

claim Tipo Multivaluado Descripción
email string Dirección de correo electrónico preferida, en el formato RFC5322.
Este valor no tiene porqué ser único por lo que nunca debe utilizarse como identificador.
email_verified boolean Indica si se ha verificado que la persona controla la dirección de correo electrónico.
Siempre es cierto para los correos de la UPM.

offline_access

El scope opcional offline_access permite obtener un acceso consultar en el futuro la información de la cuenta sin necesidad de la presencia de la persona dueña de los datos.

Warning

Es obligatorio el consentimiento expreso del propietario para poder utilizar este scope.

Al solicitar el acceso offline, se proporciona un Refresh Token de OAuth2 que puede utilizarse para obtener un Access Token que permita el acceso a la API UserInfo aunque la persona no esté conectada en ese momento.

Scopes personalizados

Junto a los scopes estándar, SIU proporciona un conjunto de scopes personalizados.

Scopes experimentales

Algunos de estos scopes pueden considerarse experimentales lo que se indicará con . Es posible que estos scopes cambien su nombre, claims, definición o se eliminen en el futuro.

academia_identifiers

El scope opcional academia_identifiers proporciona identificadores comúmente utilizados en entornos académicos.

claim Tipo Multivaluado Descripción
unique_id string Identificadores legales con el formato: urn:schac:personalUniqueID:<country>:<type>:<value>
Permite registrar múltiples identificadores según países (DNI en España, FIC en Finlandia...)

Warning

Es obligatorio el consentimiento expreso del propietario para poder utilizar este scope.

Existe un conjunto de extensiones nacionales que definen los distintos tipos y valores:

Pasaporte

Este campo dispone de un formato genérico para pasaportes delegado a GÉANT Association:

urn:schac:personalUniqueID:int:passport:<COUNTRY>:<PASSPORT_CODE>

academia_profile

El scope opcional academia_profile proporciona datos de la persona comúmente utilizados en entornos académicos.

claim Tipo Multivaluado Descripción
sn1 string Primer apellido de la persona
sn2 string Segundo apellido de la persona

edu_affiliation

El scope opcional edu_affiliation para proporcionar información relativa a la afiliación genérica de la persona con la UPM.

claim Tipo Multivaluado Descripción
affiliation string Relaciones genéricas de la persona con la UPM.
primary_affiliation string Relación primaria de la persona con la UPM.
scoped_affiliation string Relaciones de la persona en el dominio de seguridad (upm.es).

El listado de relaciones utilizadas:

Relación Perfil
member Miembro de faculty, staff o student
faculty Personal docente
staff Personal no docente
student Estudiante
alum Estudiante egresado (alumni)
affiliate Personal de fundaciones, empresas, consejo social, etc...
library-walk-in Invitados y usuarios temporales.

upm_affiliation

El scope opcional upm_affiliation proporciona información detallada relativa a la afiliación de la persona con la UPM.

claim Tipo Multivaluado Descripción
upm_affiliation string Afiliaciones de la persona con la UPM con el formato: <tipo>:<centro>:<rol>.
upm_centre string Listado de centros (códigos) con los que la persona tiene algún tipo de afiliación.
upm_employee_type string Listado de roles que tiene la persona.

El listado de roles utilizados tanto en upm_affiliation como en upm_employee_type:

Rol Descripción
A Estudiante con matrícula activa
E Estudiante sin matrícula activa no egresados (estudiante en abandono)
I Estudiante egresado (alumni)
N Estudiante de nuevo ingreso sin matrícula formalizada
W Estudiantes master de otras universidades
F PTGAS funcionario activo
L PTGAS laboral activo
X PTGAS no activo (ex-PTGAS)
G PTGAS Jubilado
D PDI Activo
J PDI Jubilado
H PDI no activo (ex-docente)
M PDI visitante
Q PDI Ad Honorem
U PDI de títulos propios
P PDI Emérito con contrato
C PDI Emérito sin contrato
R Investigador Ramón y Cajal / Juan de la Cierva / Talento / Beatriz Galindo
B Investigador invitado / Colaborador / Margarita Salas
T Personal de fundaciones (FGUPM, FUNDETEL, FUNDISMA)
S Personal de la OTT
Y Personal de empresas contratadas
K Miembro del consejo social
V Invitados
O Otros (rol a extinguir)
- Cuentas institucionales

upm_identifiers

El scope opcional upm_identifiers proporciona identificadores internos de la UPM.

claim Tipo Multivaluado Descripción
primary_unique_id string Identificador legal primario con el formato: (NIF|NIE|PTGAS|DID):<number>.
primary_unique_id_number string Identificador legal primario. Debe usarse siempre junto con primary_unique_id_type.
primary_unique_id_type string Tipo del identificador legal primario. Debe usarse siempre junto con primary_unique_id_number.

Warning

Es obligatorio el consentimiento expreso del propietario para poder utilizar este scope.