Autenticación via SAML
Flujo
Paso 1: El usuario accede a la URL de la aplicacion (ej.
https://sistema.siu.edu.ar
)Paso 2: La clase
toba_autenticacion_saml.php
invoca a la libreríaSP
y este chequea si el usuario tiene un token asignado. Si tiene uno asignado directamente deja pasar al sistema.Paso 3: Si el
SP
no tiene un token asociado al usuario, rederige al usuario hacia el idP (http://idp.siu.edu.ar
)Paso 4: En caso de no haberlo hecho anteriormente, el
idP
muestra la pantalla de login, el usuario ingresa sus credenciales y se chequea contra el backend (que puede ser un LDAP, BD, shibboleth, etc.)Paso 5: Una vez logueado el
idP
hace unPOST
hacia elSP
enviando el token SAML (http://sistema.siu.edu.ar/sp
)Paso 6: El
SP
almacena el token y redirige via GET hacia la pagina inicial (http://sistema.siu.edu.ar
)
Alternativas para el SP
Hay dos alternativas para el SP en Toba:
Usar el SP de OneLogin (
saml_onelogin
). Ventaja: no requiere publicar un alias extra y la librería es mucho mas chica y razonable.Usar el SP de SimpleSAMLPhp (
saml
a secas). Ventaja: es el mas común y esta soportado en versiones mas viejas de toba (2.5+)
Recomendamos el uso de OneLogin
Alternativa 1: SP de OneLogin
Requisitos
Toba 2.7+
Una operación de login actualizada. Se puede regenerar ejecutando el comando
toba proyecto actualizar_login
. Notar que cualquier modificación a la operación de login original necesita ser re-aplicada al nuevo loginTener instalado un idP. Aca hay un instructivo basico sobre como hacer un idP de prueba
Activación
Editar el archivo instalacion/instalacion.ini
y cambiar esta
configuración
autenticacion = saml_onelogin
Configuración
Editar el archivo instalacion/saml_online.ini descomentando y configurando el servidor IDP al que se quiere conectar
A su vez hay que registrar este SP dentro del IDP. Si se usa
simplesamlphp como IDP, es cuestion de editar el archivo
metadata/saml20-sp-remote.php
, agregando
$metadata["$URL_PROYECTO/default-sp"] = array(
'AssertionConsumerService' => "$URL_PROYECTO/?acs",
'SingleLogoutService' => "$URL_PROYECTO?/sls"
);
Alternativa 2: SP de SimpleSAMLPHP
Activación
Editar el archivo instalacion/instalacion.ini
y cambiar esta
configuración
autenticacion = saml
Configuración
En el archivo instalacion/saml.ini
[basicos]
;Esto determina cual SP utilizar, en este caso el que viene integrado en toba, se puede poner un path fijo de un SP de simplesaml externo
path_sp = 3ros/simplesamlphp
;Determina dentro del simplesamlphp, cual autenticacion usar
auth_source = default-sp
;Permite cuambiar el atributo que se lee como username, se usa el [http://saml2int.org/profile/current#section6 estandar de SAML 2.0]
atributo_usuario = urn:oid:0.9.2342.19200300.100.1.1
;Si esta prendido, antes de redireccionar al iDP muestra una pantalla de login de toba donde se puede loguear ademas usando la tabla toba_usuarios. Si esta apagado redirecciona derecho
permite_login_toba= 0
Configuracion SP integrado
La forma mas facil de utilizar SAML es usar el mismo SP distribuido con toba, para ello hay que configurar estos parámetros en el archivo instalacion/saml.ini:
[sp]
;URL donde se va a publicar el SP
baseurlpath = /toba_trunk_sp/
;Toba usa un nombre de cookie particular, diferente al default de PHP. El SP tiene que apuntar a este misma cookie
session.phpsession.cookiename = TOBA_SESSID
:URL del idp a utilizar
idp = http://localhost/simplesaml/saml2/idp/metadata.php
;Esto permite configurar el idp puntual que se consume arriba
[idp:http://localhost/simplesaml/saml2/idp/metadata.php]
name = Your IdP
SingleSignOnService = http://localhost/simplesaml/saml2/idp/SSOService.php
SingleLogoutService = http://localhost/simplesaml/saml2/idp/SingleLogoutService.php
certFingerprint = AF:E7:1C:28:EF:74:0B:C8:74:25:BE:13:A2:26:3D:37:97:1D:A1:F9
Si la instalacion se hizo antes de la version 2.5, hay que agregar la
URL del SP al archivo instalacion/toba.conf
:
Alias /{URL_TOBA}_sp "{PATH_TOBA}/php/3ros/simplesamlphp/www"
<Directory {PATH_TOBA}/php/3ros/simplesamlphp/www>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
Por ahora se requiere que el
SP
y elIDP
esten en dos dominios (o subdominios) distinto, sino al loguearse o reloguearse aparece un error del tipoState information lost
. Una solución sencilla es meterle un hostname distinto para elIDP
(editando el archivo/etc/hosts
), o haciendo unVirtualHost
para definir elIDP
. Ver nota de simplesamlphpEn la configuración de toba aun no esta previsto cambiar el certificado/clave privada del SP. Si se quiere usar uno distinto al default de la libreria, consultar la documentacion de simplesamlphp para cambiarlo directamente.