2011-09-23 69 views
10

Uno de nuestros clientes solicita que implementemos el Cierre de sesión único (SLO) a través de SAML. Su lado del servicio SAML es el Proveedor de identidad, mientras que el nuestro es el Proveedor de servicios. El inicio de sesión único (SSO) funciona validando las credenciales del usuario con el IdP del cliente, luego redirigiendo al usuario a una página de inicio de sesión en otra plataforma, con un token que les permite iniciar sesión directamente. Esa plataforma no sabe absolutamente nada sobre SAML, y particular no comparte el estado de sesión SimpleSAMLphp.¿Hay un buen ejemplo SimpleSAMLphp SLO?

Cerrar sesión tiene que ocurrir de dos maneras, sin embargo:

  • Si el usuario pulsa el botón de cierre de sesión en nuestra plataforma, deberá iniciar sesión a salir de nuestro sitio, y pulsa el servicio SLO del IdP.

  • Si el usuario presiona el botón Cerrar sesión del lado del cliente o del otro proveedor de servicios, el IdP del cliente golpeará el servicio SLO de nuestro SP, que luego debe cerrar la sesión de nuestra plataforma real antes de redireccionar al usuario a la página de respuesta de cierre de sesión del SP.

soy capaz de convencer a nuestra plataforma para redirigir al usuario a una página cualquiera de cierre de sesión, así que creo que la primera parte se puede lograr mediante una página que utiliza SimpleSAML_Auth_Simple::getLogoutURL().

Dicha página también puede funcionar cuando se golpea desde el lado de IdP, pero las especificaciones de SAML son lo suficientemente complicadas como para no estar seguro hasta que lo intentemos. Sin embargo, la configuración SP en config/authsources.php no acepta un parámetro SingleLogoutService; los metadatos producidos por /www/module.php/saml/sp/metadata.php/entityid aún muestran /www/module.php/saml/sp/saml2-logout.php/entityid como la ubicación de SingleLogoutService. Si esa página es necesaria para borrar la sesión de SimpleSAMLphp, está bien, pero necesito saber cómo introducir los redireccionamientos adicionales necesarios para desconectar al usuario de nuestra plataforma.

He intentado buscar ejemplos, pero todo lo que obtengo son referencias de la API. También sería bueno saber cómo puedo probar el cierre de sesión sin intentar configurar mi propio IdP; ¿Hay un servicio como el openidp.feide.no que maneja SLO además de SSO?

+0

Eche un vistazo a [Shibboleth] (http://shibboleth.internet2.edu/). –

+0

@JaredFarrish: El software allí parece estar basado en Java, donde se nos ha pedido usar PHP para pasas histéricas. Si te refieres al protocolo, es dictado por el cliente; los dos están relacionados, pero no estoy del todo seguro de que sean completamente compatibles. Ya fue bastante difícil convencer a un verdadero paquete de SAML para hablar con el servicio del cliente. – eswald

Respuesta

3

SLO Edición

Imagine lo siguiente esquema:

Plattform - SP1 ----- ----- IdP SP2 ----- Aplicación

Plattform y aplicaciones están conectadas con simpleSAMLphp SP, que también forma una federación con un IdP.

Debe encontrar la normal de la sesión en función de Platffom, app1 y app2 y volver a escribir:

normal_app_logout() { 

// code of the normal logout 
.... 
.... 

// new code 

require_once('<path-to-ssp>/simplesamlphp/lib/_autoload.php'); //load the _autoload.php 
$auth = new SimpleSAML_Auth_Simple('default-sp'); // or the auth source you using at your SP 
$auth->logout(); <--- call to the SLO 
} 

Esto terminará la sesión local, la sesión SP conectado a esta aplicación, la sesión de desplazados internos y las sesiones de SP de los SP conectados al IdP pero ... ¿qué ocurre con la sesión de otras aplicaciones? Ellos todavía estarán activos. Pensaste en una llamada activa para finalizarlo, pero creo que es mejor si también anulas la función "is_logged_in()" que implementan muchas aplicaciones.

Debe anular esta función y devolver sólo cierto si existe también una sesión SP válida activa mediante la función

$auth->isAuthenticated() 

Recientemente he implementado esta funcionalidad en la Wordpess SAML plugin, active la Edición code

IdP

Use Onelogin free trial, puede registrar su SP allí y usar su IdP. Siga esto guide to configure your SAML connectors

Pero creo que es mejor que intente construir un IdP por su cuenta. Hay un buen documentation y los pasos son fáciles. Utilice authsource "example-userpass" si no quiere perder tiempo configurando una base de datos/ldap.

También puede establecer su instancia actual de simplesamlphp como SP & IdP, pero creo que si está aprendiendo simplesamlphp mejor no mezcle.

Cuestiones relacionadas