Foros del Web » Programando para Internet » PHP »

Problema login multiweb

Estas en el tema de Problema login multiweb en el foro de PHP en Foros del Web. Buenas, he estado mirando en el foro acerca de este tema, pero realmente como no se cuales son los terminos que deberia buscar... en definitiva, ...
  #1 (permalink)  
Antiguo 17/07/2009, 09:48
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Problema login multiweb

Buenas, he estado mirando en el foro acerca de este tema, pero realmente como no se cuales son los terminos que deberia buscar... en definitiva, no he encontrado nada al respecto.

Bueno os comento un poco lo que quiero hacer. Tengo un par de webs y me gustaria hacer una web central en la cual al registrarte puedas acceder a las otras webs de la red como usuario sin tener que volver a registrarte por separado.

Yo he pensado lo siguiente, aunque no se si es lo mas correcto o que, ya que nunca pude leer nada al respecto:
En la web central se crea un formulario de registro que guarde los datos del usuario. Cuando vas a loguearte desde otra web de la red metes el usuario y contraseña y mediante CURL y PHP se mandan los datos con POST a una pagina secreta en la web central (Por ejemplo: dominio .com /login_secreto .php). Mandaria el Ususario y la contraseña (la contraseña con MD5 que supongo que es la forma correcta, aunque yo suelo usar MD5(MD5(MD5($pass))) :P ) entonces recupero en una variable el texto que devuelva la pagina. Si es OK entonces se loguea y ya crea las variables de sesion o cookies, si es ERROR sale el error. ¿Como lo veis?

¿Está seria la forma correcta de hacerlo?
¿Deberia encriptar los datos de alguna manera para enviarlos?
¿Deberia conectar de otra forma que no fuera CURL?

¿Que otras ideas se os ocurren?

En la plataforma central yo solamente guardaria los datos basicos en la base de datos al registrarse: NOMBRE, USUARIO, PASS, EMAIL. Despues en cada web que se loguee, si es la primera vez se le pediria de ampliar datos para esa plataforma en concreto.

Necesitaria todos los consejos posibles, enlaces y documentacion al respecto para empaparme bien y no fastidiarla en cuanto a seguridad.

Un saludo y muchas muchas gracias por adelantado.
  #2 (permalink)  
Antiguo 17/07/2009, 10:11
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 18 años
Puntos: 50
Respuesta: Problema login multiweb

lo que yo haria es usar la misma base de datos para todas las web dependiendo lo complejas que sean estas o crear una base de datos central e ir replicando los cambios de la tabla usuarios de esta en las otras bases de datos mediante algun trigger procedimiento o una tarea programada que llame un php o algo asi.
  #3 (permalink)  
Antiguo 19/07/2009, 14:06
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Problema login multiweb

Claro, eso es lo primero que pensé pero no puedo depender de ello por el simple problema de que puede que alguna de estas webs esté en otro servidor utilizando su Base de datos. Es decir, cada web tiene su BD individual.

En definitiva lo que acabaria haciendo es un sistema que todas las webs de mi network utilizasen esta forma de login y que incluso otras webs pudieran utilizarlo (Webs de amigos, compañeros,...) con un simple modulo.

Agradeceria mas mensajes ;)
  #4 (permalink)  
Antiguo 19/07/2009, 18:43
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Problema login multiweb

Buenas! os voy a poner lo que he hecho en este rato para que, si voy por buen camino, pueda servir de inicio para mas gente.

Necesitaremos 3 archivos: uno para las funciones, uno para procesar los datos que se envien en un form cualkiera que mande user y pass, y otro que se colocaria en la plataforma central que comprueba si existe el user y pass. Aunque yo en el ejemplo no voy a poner la sql por que para el ejemplo es una tonteria.

Primero estan las funciones, lo he hecho así para que quede mas limpio luego :P

Código PHP:

//Funcion de encriptado para passwords, super passwords :P

function super_pass($string){
return 
sha1(md5($string)); // xD tantos md5 y shas como se kiera
}


    
// Funcion para obtener el login
function login_externo($usuario,$pass){
include(
'conf.php');
$usuario=trim(strip_tags(addslashes($usuario)));
$pass=trim(strip_tags(addslashes($pass)));
$pass=super_pass($pass);
$ch curl_init($url_login_externo);  // la url puede ser por ejemplo localhost/proyecto/login_secretisimo .php
curl_setopt ($chCURLOPT_POST1); 
curl_setopt ($chCURLOPT_POSTFIELDS"user=$usuario&pass=$pass"); 
curl_setopt($chCURLOPT_RETURNTRANSFER  ,1);

$datos=curl_exec ($ch); 
curl_close ($ch); 

return 
$datos;


Ahora el archivo que procesará en la web central los datos
Código PHP:
if($_POST['user'] && $_POST['pass']){
echo 
'OK||'.$_POST['user'].'||valencia||leif ferreira ponce||[email protected]';
    
/*
    //Consultaria a la BD
        if($mysql_result($q,0)>0){
        // Está logueado
        echo 'OK||'.$_POST['user'].'||valencia||leif ferreira ponce';
        }else{
        // No se ha logueado
        echo 'ERROR';
        }
    */
}else{
header("HTTP/1.0 404 Not Found"true404); 
echo 
'<html><head><title>404 Not Found</title></head><body bgcolor=white><h1>404 Not Found</h1>The requested URL does not exist.</body></html>';


Despues el fichero que procesa el form
Código PHP:
include('funciones.php');
$res=login_externo('leifsk8er','123456');
    if(
eregi('OK',$res)){
    
// Se logueó correctamente
    
$partes=explode('||',$res);
    
$estado=$partes[0];
    
$usuario=$partes[1];
    
$provincia=$partes[2];
    
$nombre=$partes[3];
    
$email=$partes[4];
            
// Ejemplo tonto ;)
        
echo 'ESTADO='.$estado;
        echo 
'<br>USUARIO='.$usuario;
        echo 
'<br>PROVINCIA='.ucwords($provincia);
        echo 
'<br>USUARIO='.ucwords($nombre);
        echo 
'<br>USUARIO='.$email;
    }else{
    
// No se logueó
    

Mas o menos eso puede servir para orientaros. Se necesitan conocimientos un poco avanzados para comprenderlo, almenos un poquito :P

UN saludo


PD: Si sabeis las IP´s de los servidores que aceptas para recibir post puedes hacer una condicion sacando la ip de quien visita, puedes usar este codigo que te crea una variable de session si quieres con la ip del visitante.

Código PHP:
session_start();
if(
$_SESSION['REALIP']==''){
                    if (
$_SERVER) {
                        if ( 
$_SERVER[HTTP_X_FORWARDED_FOR] ) {
                        
$_SESSION['REALIP'] = $_SERVER["HTTP_X_FORWARDED_FOR"];
                        } elseif ( 
$_SERVER["HTTP_CLIENT_IP"] ) {
                        
$_SESSION['REALIP'] = $_SERVER["HTTP_CLIENT_IP"];
                        } else {
                        
$_SESSION['REALIP'] = $_SERVER["REMOTE_ADDR"];
                        }
                        } else {
                            if ( 
getenv'HTTP_X_FORWARDED_FOR' ) ) {
                            
$_SESSION['REALIP'] = getenv'HTTP_X_FORWARDED_FOR' );
                            } elseif ( 
getenv'HTTP_CLIENT_IP' ) ) {
                            
$_SESSION['REALIP'] = getenv'HTTP_CLIENT_IP' );
                            } else {
                            
$_SESSION['REALIP'] = getenv'REMOTE_ADDR' );
                            }
                        }


Última edición por leif_sk8er; 17/01/2010 a las 00:46
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:09.