Personalización de atributos en los protocolos
En SIU-Araí: Usuarios utilizamos dos protocolos para que nuestro módulo IDP le asegure a las aplicaciones la identidad de los usuarios que se autentican.
Para la capa de identidad tenemos como posibilidad la utilizacion de OpenId Connect (conceptos-oidc.md) , mientras que para la transmisión de esa identidad a las aplicaciones utilizamos SAML 2.0 (conceptos-saml.md).
La transmisión de estos datos por el protocolo SAML hace uso de Tokens, los cuales llevan atributos con información del usuario y cuyo uso iremos detallando a continuación.
Para un listado completo de los atributos disponibles (conceptos-atributos-disponibles.md)
Atributos
Agregando atributos custom en SAML
Así mismo se pueden especificar atributos extra que viajarán en el Token vía el archivo usuarios.yml.
En este archivo se define una lista de atributos extra que se almacenarán para un usuario
y si los mismos deben ser enviados como parte del Token SAML.
Como vemos en el ejemplo a continuación, los atributos a ser adicionados en el Token serán aquellos consignados bajo la entrada atributos_adicionales_saml
usuarios:
atributos_adicionales:
genero: ~
tipoDocumento: ~
numeroDocumento: ~
mails: ~
certificado:
longitud: 3000
cuit:
longitud: 11
descripcion: "N° de CUIT/CUIL (sin guiones)"
atributos_adicionales_saml:
- displayName
- cuit
Agregando atributos via processing filters
Otro mecanismo para agregar o modificar atributos es vía un modulo SimpleSAMLPhp haciendo uso de los Authentication Processing Filters.
Basicamente es una clase que extiende de \SimpleSAML\Auth\ProcessingFilter
e implementa el metodo process(&$request)
donde se pueden manipular los atributos presentes en el arreglo $request
.
Recurriendo a nuestro ejemplo previo de módulo, la disposicion de la clase sería:
unam
├── default-enable
└── lib
└── Auth
└── Process
└── authProcImplementingClass.php
Para hacer uso del processing filter es necesario indicarlo en la configuración de SimpleSAMLPhp, ya sea a nivel global o de manera dinámica indicandolo con el formato nombre_modulo:nombre_clase
.
De manera global, haciendo uso de los parametros authproc.idp
o authproc.sp
dentro de idp/config/simplesamlphp/config.php
De manera dinamica, listandolo en el parametro authproc
como parte de la configuración del SP.
Traducir atributos SAML a claims OIDC
Que sucede cuando la capa de identidad es OIDC, en dicho caso se debe realizar una traducción de los claims hacia los atributos SAML, he aqui una tabla con la correspondencia entre ellos:
SAML | OIDC Claim |
---|---|
uid | sub |
sn | family_name |
givenName | given_name |
eduPersonNickname | nickname |
uniqueIdentifier | preferred_username |
labeleduri | profile |
jpegPhotoUrl | picture |
preferredLanguage | locale |
postalAddress | address |
telephoneNumber | phone_number |
email_verified | email_verified |
Por el momento, la tabla de traducción de atributos se encuentra dentro del archivo idp/config/simplesamlphp/module_oidc.php
en la componente denominada translate
Agregar Scopes propios
Los scopes son valores usados por los clientes para especificar que privilegios de acceso son requeridos con el Access Token, estos determinan el conjunto de informacion que va a estar disponible como claims.
OpenID Connect define los siguientes valores de scopes
- openid: requerido, informa al servidor de autorización que se trata de un request OpenID Connect.
- profile: opcional, solicita acceso a los claims del perfil del usuario final (ej:
nickname
,gender
,locale
,given_name
, etc) - email: opcional, solicita acceso a los claims de
email
yemail_verified
- address: opcional, solicita acceso al claim
address
- phone: opcional, solicita acceso a los claims
phone_number
yphone_number_verified
Múltiples scopes pueden ser específicados en un pedido si se envian como una lista separada por espacios.
Para agregar scopes propios, por el momento los mismos se deben incluir en el archivo idp/config/simplesamlphp/module_oidc.php
en la componente denominada scopes