Funcion para utilizar el servicio Open ID
OpenID ha sido una impresionante idea para descentralizar y estandarizar las cuentas de usuario de manera que registrándonos en un solo servidor podamos compartir los datos que queramos solo con una URL.
El funcionamiento es sencillo. Un usuario se registra en un servidor openID y pone su el código resultante en su blog, pagina personal, perfil… lo que quiera… o si no tiene simplemente utiliza la dirección del perfil de OpenID. Cuando quiera acceder a algún otro servidor que soporte OpenID, introduce la dirección URL y envÃa. En ese momento le enviarán a una pagina a partir de la cual el usuario tendrá que poner su contraseña. Una vez autentificado que es el usuario real, el servidor de identidades openID pedirá los datos que crea necesarios para acceder a donde quiera entrar el usuario. Estos datos pueden ser necesarios o opcionales, y puede establecerse una confianza permanente o temporal. Una vez seleccionado el servidor OpenID hace regresar al usuario autenticado a la web de origen.
Este sistema hace que el gran dilema de la seguridad en los sistemas web se simplifique, permitiendo que los ataques, intrusiones y peligros sobre el acceso a datos y zonas restringidas sean un problema menos a tratar nosotros.
La complicación base está en crear el sistema que permita acceder a toda esta información de forma fácil y rápida, y para eso he creado openIdLogin().
La función openIdLogin() utiliza la clase SimpleOpenID para crear un formulario de entrada de la URL, detectar si se produce algún error y dar como resultado los datos del usuario.
A partir de los parámetros de la función podemos lograr una gran personalización. El 1º parámetro indica el nombre del botón enviar del formulario donde introducimos la URL, el 2º El texto del link para crear una nueva OpenID bajo el servidor de Verisign, el 3º indica la dirección de la pagina web en la que se ejecuta la función y el 4º y ultimo la dirección URL a la que regresara el usuario después de aceptar el envió de datos desde el servidor.
Estas dos ultimas variables toman automáticamente los valores del servidor y archivo en el que se están ejecutando si no se pone nada.
La función da como resultado dos tipos de datos. Si hubo un error desconocido dará el valor boleano False, si no da como resultado un array.
Cuando no se ha iniciado ninguna consulta OpenID, la función da un array que contiene las claves text con el texto html del formulario de envió listo para poner directamente en la web y lines, el formulario linea a linea.
Si se realiza alguna consulta y esta resulta errónea por algún motivo la función da como resultado un array con la clave error que contendrá una lista de los errores.
En cambio si todo fue correcto, se da como resultado un array con clave user_data.
-
function openIdLogin($text_login = 'entrar', $text_get_new = 'Crear mi OpenID nueva', $direccion_de_servidor = null, $id_de_regreso = null){
-
require_once('class.openid.php');
-
if(!($direccion_de_servidor)){ $direccion_de_servidor = 'http://'.$_SERVER['HTTP_HOST']; }
-
if(!($id_de_regreso)){ $id_de_regreso = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']; }
-
if ($_POST['openid_action'] == "login"){
-
// Cogemos la OpenID en formato URL y redirigimos al servidor
-
$openid = new SimpleOpenID;
-
$openid->SetIdentity($_POST['openid_url']); // Establecemos la URL de identidad del visitante
-
$openid->SetTrustRoot($direccion_de_servidor); // Establecemos el servidor que pide la autorizacion
-
$openid->SetOptionalFields( // Y estos son los opcionales
-
);
-
if($openid->GetOpenIDServer()){ // Si la apertura no da como resultado algun error
-
$openid->SetApprovedURL($id_de_regreso); // Url de regreso desde el servidor de OpenId
-
$openid->Redirect(); // Redirigimos al usuario al servidor de OpenId
-
} else { // Si da error lo mostrmos
-
}
-
exit; // Una vez terminado todo salimos del script
-
} else if($_GET['openid_mode'] == 'id_res') { // Si es la respuesta del servidor OpenID
-
$openid = new SimpleOpenID; // Crearemos una peticion HTTP para validar los datos que nos llegan por la URL
-
$openid->SetIdentity($_GET['openid_identity']); // Establecemos la identidad cogiendo el parametro openid_identity desde la URL
-
$openid_validation_result = $openid->ValidateWithServer(); // Guardamos el resultado de la validadcion
-
-
if($openid_validation_result == true){ // Si la identidad es correcta
-
} else if($openid->IsError() == true) { // Si hubo errores
-
} else {
-
return false; // Si la autenticacion no era valida
-
}
-
} else if ($_GET['openid_mode'] == 'cancel') { // El usuario cancelo la autorizacion
-
return false;
-
} else {
-
' <fieldset id="openid">',
-
' <legend>OpenID</legend>',
-
' <form action="'.$id_de_regreso.'" method="post" onsubmit="this.login.disabled=true;">',
-
' <input type="hidden" name="openid_action" value="login">',
-
' <div>',
-
' <input type="text" name="openid_url" class="openid_login">',
-
' <input type="submit" name="login" value="'.$text_login.'>>">',
-
' </div>',
-
' <div><a href="http://pip.verisignlabs.com/" class="link">'.$text_get_new.'</a></div>',
-
' </form>',
-
' </fieldset>');
-
}
-
}
El siguiente ejemplo utiliza la función para mostrar el formulario de petición de datos al servidor openID. Si hay algún error lo salta, y no pone nada directamente. Si se recibe el array de datos del usuario lo muestra al completo.
Para utilizar esta función es necesario tener el archivo "class.openid.php" en la misma carpeta. La función puede ser descargada desde aquÃ.
Comparte este artículo
Licencia de los contenidos
© Todos los derechos reservados