Sofia2 SingleSignOn

La plataforma Sofia2 expone un servicio REST que permite a sistemas externos logarse y autorizarse, utilizando la plataforma como repositorio de usuarios.

Este servicio consta de tres métodos.

http://sofia2.com/console/api/rest/autentication/authenticate
http://sofia2.com/console/api/rest/autentication/authorize

El método authenticate, recibiendo una cabecera Basic, usuario:contraseña en base64, es capaz de autenticar al usuario correspondiente a esas credenciales, y devuelve los datos básicos del usuario junto a su Token y una SessionKey, el Token del usuario es gestionado al igual que el user y password a través de la plataforma, la SessionKey es generada automáticamente en el momento en el que se realiza la autenticación y su vida está ligada a la sesión del usuario.

Ejemplo de información devuelta al autenticar a un usuario válido.

{

“user”: {

“nombrecompleto”: “Prueba”,

“email”: “prueba”,

“identificacion”: “prueba”,

“fechaalta”: “26/02/2016 00:00:00”,

“fechabaja”: null,

“token”: “472b0b7a83f04e6d8db2eaa79b205b70”,

“rol”: “ROL_ADMINISTRADOR”

},

“SessionKey”: “7967bd5e-5aea-43bb-b6be-a6a4ebffd8e0”

}

El método authorize, recibe en una cabecera la SessionKey recuperada en la autenticación, y como parámetro el Token del usuario, si la SessionKey es incorrecta devolverá un error.

http://sofia2.com/console/api/rest/autentication/logout


El método logout, cierra la session del usuario, para ello únicamente debemos pasarle como parámetro el Token del usuario.

En la siguiente URL podemos descargar un ZIP con un proyecto básico de ejemplo, de como usar el SingleSingOn de Sofia2 y un API JavaScript para facilitar su uso.

http://sofia2.org/owncloud/public.php?service=files&t=44cba7e216a1a778479062e2af356139

El API lo encontramos en el archivo authenticate.js

El ejemplo consta de dos página HTML, un login y un index, la página index comprueba en la cabecera si se está autorizado para acceder.

  window.onload = authorize(“login.html”);

El código comprueba si existe un Token y SessionKey y realiza una invocación POST a la URL del servicio authorize, si no existen estos datos o el resultado de la invocación es falso, redirecciona a la página que se le pasa como argumento en su llamada.

function authorize(page) {
var user = JSON.parse(localStorage.getItem(“user”));
var sessionKey = JSON.parse(localStorage.getItem(“sessionKey”));
if (user!=null&&sessionKey!=null){
$.ajax
({
url:localStorage.getItem(“url”)+”/authorize“,
type : ‘POST’,
dataType: ‘json’,
contentType: ‘application/json’,
data: user.token,
beforeSend : function( xhr ) {
xhr.setRequestHeader( ‘X-SOFIA2-SessionKey’, sessionKey);
},
error: function(data){
window.location.replace(page);
}
});
}else{
window.location.replace(page);
}
}

En esta misma página también encontramos el enlace que realiza el cierre de la sesión.

<li><a id=”close-session” class=”header-close” onclick=”logout(‘login.html’)”>Cerrar sesion</a></li>

Esta función invoca al servicio logout y redirecciona a la página que se le pasa como argumento.

function logout(page) {
var user = JSON.parse(localStorage.getItem(“user”));
var sessionKey = JSON.parse(localStorage.getItem(“sessionKey”));
if (user!=null&&sessionKey!=null){
$.ajax
({
url:localStorage.getItem(“url”)+”/logout“,
type : ‘POST’,
dataType: ‘json’,
contentType: ‘application/json’,
data: user.token,
success: function (data){
localStorage.removeItem(“user”);
localStorage.removeItem(“sessionKey”);
window.location.replace(page);
},
error: function(data){
alert(‘No se pudo realizar el logout’);
}
});
}else{
window.location.replace(page);
}
}

La página login.html contiene la invocación a la función de Login

<input class=”btn btn-primary” type=”button” value=“Login” id=“submit” onclick=”authenticate(‘http://sofia2.com/console/api/rest/autentication’,’index.html’,’Usuario o password incorrecto’)” />

Esta función recibe tres parámetros, el primero la URL de la instancia Sofia2 contra la que se quiere autenticar, este ejemplo utiliza al instancia Sofia2.com, la página a la que se quiere redireccionar cuando la autenticación sea correcta, y el mensaje que se quiere mostrar cuando sea errónea.

El usuario y la contraseña las recupera de dos elementos del documento que se deben llamar username y password, los datos del usuario los almacena en un atributo de tipo localStorage llamado user y la sessionKey en otro atributo llamado sessionKey.

Al ser atributos de tipo localStorage, podremos autenticar un una sesión del explorador y usarlo en otras sesiones diferentes, si queremos que la sesión sea única y no compartir el login entre pestañas y ventanas del explorador podemos cambiar el objeto localStorage por uno de tipo sessionStorage.

function authenticate(url, page, output_msg) {
localStorage.setItem(‘url’,url);
var username = document.getElementById(‘username’).value;
var password = document.getElementById(“password”).value;
$.ajax
({
url:url+”/authenticate“,
type : ‘POST’,
dataType: ‘json’,
contentType: ‘application/json’,
beforeSend : function( xhr ) {
xhr.setRequestHeader( ‘Authorization’, encript(username, password));
},
success: function (data){
localStorage.setItem(‘user’,JSON.stringify(data.user));
localStorage.setItem(‘sessionKey’,JSON.stringify(data.SessionKey));
window.location.replace(page);
},
error: function(data){
showErrorDialog(output_msg);
}
});
}
Sofia2 SingleSignOn

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s