Foros del Web » Programando para Internet » PHP »

Proyecto: sesiones entre dominios

Estas en el tema de Proyecto: sesiones entre dominios en el foro de PHP en Foros del Web. Hola Estoy diagramando la forma de unificar los usuarios de mis sitios como hizo google. Me gustaria saber sus opiniones, experiencias o sugerencias. Hasta ahora ...
  #1 (permalink)  
Antiguo 23/04/2013, 15:32
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Pregunta Proyecto: sesiones entre dominios

Hola

Estoy diagramando la forma de unificar los usuarios de mis sitios como hizo google. Me gustaria saber sus opiniones, experiencias o sugerencias.


Hasta ahora lo tengo en mi mente y tambien algunas pruebas que hice:

- Unifique la base de datos de usuarios entre los dominios.
- Arme una pagina de login/registro unica en otro dominio (a partir de ahora: checking) y redirigo todo ahi para esta cuestion.


Como trabajaria ?

1 - Entro a "Dominio A" y voy a iniciar sesion, redirijo desde "Dominio A" a pagina "Checking"
2 - Verifico si existe sesion, de existir redirijo de nuevo a "Dominio A" y lo logueo
3 - Si no existe sesion, muestro form para loguear, se loguea y lo redirijo de nuevo a "Dominio A" y lo logueo

el mismo proceso se repetiria para todos los dominios. La teoria esta bien, pero la practica ?



Problemas y soluciones ?

- Seguridad: Habria que pasar datos por GET (Salvo que tengas un VPS y puedas configurar de aceptar POST de otros sitios no?)

- Habria que guardar datos de logueo en la base de datos para verificar usuario y tiempo de logueo (entre otros, pueden ser mas) al devolver la respuesta de "Checking" a "Dominio A"

- Ideal con certificado SSL ? (seria muy caro un certificado para cada dominio) como se podria mejorar la seguridad sin ssl?



se me plantearon estas dudas, y como no tengo con quien discutirlas, las publico aca...



que piensan ?

abz
  #2 (permalink)  
Antiguo 24/04/2013, 13:36
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Proyecto: sesiones entre dominios

Hola , podrias usar un dominio donde solo alojes la base de datos unificada para todos los dominios .
Luego en cada dominio todas las consultas apuntan hacia ese dominio donde esta alojada la bd.

Código PHP:
Ver original
  1. $mysqli = new mysqli("127.0.0.1", "usuario", "contraseña", "basedatos", 3306);
  2. if ($mysqli->connect_errno) {
  3.     echo "Fallo al contenctar a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
  4. }

es una idea pero nunca lo he probado haber si alguien puede corroborarlo que funciona y si funciona solucionas algunos problemas de los planteados.

¿deseas que los usuarios navegen entre dominios como usuarios logueados? es que no quedo claro.

Última edición por webankenovi; 24/04/2013 a las 13:43
  #3 (permalink)  
Antiguo 24/04/2013, 13:50
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 7 meses
Puntos: 528
Respuesta: Proyecto: sesiones entre dominios

Yo armé un sitio donde cada subdominio tiene su propia bd y un dominio "padre" tiene acceso al usuario sql que puede ver todas las bd.

Así cuando un usuario de un subdominio entra, según su subdomino se cargan los datos de conexión para su bd. Desde luego se toma en cuenta algunas medidas de seguridad, por ejemplo para evitar que un usuario de subdominio acceda a la información de otro.
  #4 (permalink)  
Antiguo 24/04/2013, 14:07
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Proyecto: sesiones entre dominios

como yo quiero decir seria de esta manera

1 dominio1.com // servicio de coches
2 dominio2.com // talleres
3 dominio3.com // asesoria
4 dominio4.com // base de datos

si nos registramos en el dominio 1 los datos se guardan en el dominio 4 por lo cual si accedo al dominio 3 y me logueo tambien podre acceder a ese servicio ya que dominio 3 valida mis datos en el dominio 4 y previamente los guardamos en el dominio 1 , asi que con al misma cuenta puedes acceder a varios servicios en diferentes dominios

no he llegado a entenderte del todo ocp001a
  #5 (permalink)  
Antiguo 24/04/2013, 15:07
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

Cita:
Iniciado por webankenovi Ver Mensaje
Hola , podrias usar un dominio donde solo alojes la base de datos unificada para todos los dominios .
Luego en cada dominio todas las consultas apuntan hacia ese dominio donde esta alojada la bd.

Código PHP:
Ver original
  1. $mysqli = new mysqli("127.0.0.1", "usuario", "contraseña", "basedatos", 3306);
  2. if ($mysqli->connect_errno) {
  3.     echo "Fallo al contenctar a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
  4. }

es una idea pero nunca lo he probado haber si alguien puede corroborarlo que funciona y si funciona solucionas algunos problemas de los planteados.

¿deseas que los usuarios navegen entre dominios como usuarios logueados? es que no quedo claro.
la idea es que naveguen entre x cantidad dominios, y que se administre los logueos y registros en un dominio solo
  #6 (permalink)  
Antiguo 24/04/2013, 15:09
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

Cita:
Iniciado por ocp001a Ver Mensaje
Yo armé un sitio donde cada subdominio tiene su propia bd y un dominio "padre" tiene acceso al usuario sql que puede ver todas las bd.

Así cuando un usuario de un subdominio entra, según su subdomino se cargan los datos de conexión para su bd. Desde luego se toma en cuenta algunas medidas de seguridad, por ejemplo para evitar que un usuario de subdominio acceda a la información de otro.
el tema que los subdominios trabajan diferente a esto que indico ya que yo quiero administrar en dominio los accesos de todos los dominio, como lo hace "google account"
  #7 (permalink)  
Antiguo 24/04/2013, 15:15
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

Cita:
Iniciado por webankenovi Ver Mensaje
como yo quiero decir seria de esta manera

1 dominio1.com // servicio de coches
2 dominio2.com // talleres
3 dominio3.com // asesoria
4 dominio4.com // base de datos

si nos registramos en el dominio 1 los datos se guardan en el dominio 4 por lo cual si accedo al dominio 3 y me logueo tambien podre acceder a ese servicio ya que dominio 3 valida mis datos en el dominio 4 y previamente los guardamos en el dominio 1 , asi que con al misma cuenta puedes acceder a varios servicios en diferentes dominios

no he llegado a entenderte del todo ocp001a
no entendiste.. a ver

te pego esto que puse arriba
Código:
Como trabajaria ? 

1 - Entro a "Dominio A" y voy a iniciar sesion, redirijo desde "Dominio A" a pagina "Checking"
2 - Verifico si existe sesion, de existir redirijo de nuevo a "Dominio A" y lo logueo
3 - Si no existe sesion, muestro form para loguear, se loguea y lo redirijo de nuevo a "Dominio A" y lo logueo

de esa manera estariamos utilizando una sola BD en un solo dominio. Y no habria necesidad de tener el mismo registro en todas las bases de datos de todos los dominios.

me explique ?
  #8 (permalink)  
Antiguo 24/04/2013, 15:23
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Proyecto: sesiones entre dominios

Cita:
Iniciado por softmaster Ver Mensaje
no entendiste.. a ver

te pego esto que puse arriba
Código:
Como trabajaria ? 

1 - Entro a "Dominio A" y voy a iniciar sesion, redirijo desde "Dominio A" a pagina "Checking"
2 - Verifico si existe sesion, de existir redirijo de nuevo a "Dominio A" y lo logueo
3 - Si no existe sesion, muestro form para loguear, se loguea y lo redirijo de nuevo a "Dominio A" y lo logueo

de esa manera estariamos utilizando una sola BD en un solo dominio. Y no habria necesidad de tener el mismo registro en todas las bases de datos de todos los dominios.

me explique ?
Como yo te digo solo se usa una bd para todos los dominios no tendrias mas que una sola bd para esos dominios no una bd por dominio pero sin necesidad de redirigir de un dominio a otro para verificar los datos ya que el login se realiza en el dominio mismo no en el checking a si se evita redirigir , pero bueno aun asi como lo que necesitas en navegr entre dominios tampoco sirve para mucho , segun yo se entre dominios te va a ser muy complicado o imposible , entre subdominios si es posible

ahora si usas get puedes usar un hash de identificacion muy fuertemente protegido para la autentificacion entre dominios
  #9 (permalink)  
Antiguo 24/04/2013, 15:33
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

Nos vamos entendiendo jajaja ;)...

mi intencion es automatizar el logueo, por eso administro los logueos en un solo dominio, y asi evito que se tengan que loguear en cada dominio.

me comentas esto ?
Cita:
ahora si usas get puedes usar un hash de identificacion muy fuertemente protegido para la autentificacion entre dominios
  #10 (permalink)  
Antiguo 24/04/2013, 15:48
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Proyecto: sesiones entre dominios

bueno haber en vez de un hash deberias encriptar la informacion sobre del usuario para despues en el dominio b desencriptarla y validarle

ahora como seguridad no es recomendable hacerlo de la siguiente manera

miweb.com/?user=juan&pass=1234

ya que con la modificacion de la url podemos acceder a sessiones de otros usuarios investigando un poco

tampoco deberia mandarse la pass ni el user si no un dato unico existente en la bd del usuario y algunos credenciales user agent ip etc.... con eso creamos la cadena y la encriptamos

ahora si codificamos la informacion seria la url lo mas parecido a esto

miweb.com/?do=jdviudsf89gu98fdugf78gf8IJjhuguyuygyu67655

con lo cual protegemos la info y hacemos algo mas seguro el sistema

en el momento de llegar a otro dominio verificamos la cadena el dato unico el user agent ip etc.......

puedes usar la libreria crypt para encriptar la informacion

http://es.php.net/manual/es/book.mcrypt.php

una vez validado el usuario en el dominio b o c indiferentemente de donde venga se elimina la cadena y se validara por sessiones

en los links que apuntan hacia los otros dominios tiene que contener la cadena encriptada para que el user navege entre ellos con un solo login, espero haberme explicado
  #11 (permalink)  
Antiguo 24/04/2013, 15:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Proyecto: sesiones entre dominios

Yo creo te estas complicando mucho las cosas, la idea de todo esto es que tengas WebServices, para que entre dominios se puedan comunicar con el maestro.

O sea en dominio A, si es la primera vez que va a entrar creas una sesión local, si es forzoso que haga login, checas si en tu sesión local existe el token de sesión, si existe lo consultas vía WebService a ver si es válido, si no, rediriges a login y si no existe el token rediriges a login.

Al hacer login (en la pagina cehcking) creas una sesión en la base de datos, generas un token y un tiempo de vida, y rediriges de regreso a dominio A con el token, el token lo registras en la sesión de dominio A, y así en cada pagina usando WebServices checas que el token siga siendo válido para ese usuario, y listo.

Es un proceso sencillo, solamente sí tienes que tener una base de datos con sesiones (al menos en checking) para que puedas consultar tiempos y caducidades, ya en las otros dominios con que verifiques el token en cada request (usando un WebService) vas a poder decidir si es válido o no.

Saludos.
  #12 (permalink)  
Antiguo 24/04/2013, 16:01
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

estuve haciendo pruebas encriptando con md5, guardaba los datos en BD y enviaba estos datos por url.

Guardaba estos datos para verificar el logueo en otro dominio...

- id username
- username
- horario y fecha login (para verificar tiempo de session o si tildo "mantener sesion")
- ip
- idioma navegador
- dominio (del que solicito login)
- url (de donde estaba al solicitar el login)



que te parecen ?
  #13 (permalink)  
Antiguo 24/04/2013, 16:04
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Proyecto: sesiones entre dominios

gatorv te ha dado otra solucion que creo que te conviene mas
  #14 (permalink)  
Antiguo 24/04/2013, 16:08
Avatar de pumba2  
Fecha de Ingreso: diciembre-2012
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
solución

Creo en mi opinión que lo más efectivo para lo que quieres es usar web service, si te interesa me comentas .
  #15 (permalink)  
Antiguo 24/04/2013, 16:13
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

habia estado leyendo lo de webservices, pero mucho no lo pude entender aun, se que hay varias formas y lenguages de hacerlo por separado o en conjunto...

recomiendan algun metodo ? o algo que pueda leer para entenderlo mejor ?
  #16 (permalink)  
Antiguo 24/04/2013, 16:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Proyecto: sesiones entre dominios

Lee sobre SOAP, o REST, ambas te ayudan para lo que necesitas y la idea es que todo lo hagas de PHP a PHP.

Saludos.
  #17 (permalink)  
Antiguo 24/04/2013, 17:15
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

bueno gracias!... ya estoy leyendo, encontre un buen tutorial de NuSOAP
  #18 (permalink)  
Antiguo 25/04/2013, 05:51
Avatar de pumba2  
Fecha de Ingreso: diciembre-2012
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
web service

La idea básica de un web service es poder utilizar tus datos desde cualquier lenguaje o plataforma ya sea esta nativa o de ambiente web , esto incluye lenguajes de programación puedes consumir un recurso soap tanto con php como con Java o asp el tema esque toda info es retornada en archivo XML en algunos caso dentro de estos XML incrustan cadenas de retorno en formato Json para agiliza el servicio te recomiendo crear el servicio en php si tiene problemas con el tema de XML sólo comenta... :) saludos. Más rato te adjunto una estructura básica de servicio soap...
  #19 (permalink)  
Antiguo 27/04/2013, 09:45
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

estuve leyendo nusoap, php, xml...

el funcionamiento segun entendi... seria algo asi:

la libreria soap solicita a una pagina X los datos y este devuelve los mismos en xml no ?

entonces me pregunto, para el manejo de sesiones con este sistema, yo deberia solicitar los datos via soap en cada pagina/request ? o entendi mal ? no haria la carga mas lenta ?

Última edición por softmaster; 27/04/2013 a las 09:46 Razón: agregue info
  #20 (permalink)  
Antiguo 27/04/2013, 10:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Proyecto: sesiones entre dominios

Puedes regresar con el token el tiempo de vida, y registrarlo, en cada request en tu sitio local checas cuanto tiempo esta "vivo" y cuando vaya a caducar haces el request para ver si esta vivo o no. Así no tendrías que hacerlo en cada request.

Saludos.
  #21 (permalink)  
Antiguo 27/04/2013, 11:09
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

entiendo, pero me entra una duda...

si mantiene el tiempo de vida y no hago un request en cada pagina, y tiene por ejemplo 2 dominios abiertos y cierra sesion en uno de los dos, como se que tengo que finalizar la sesion en el otro dominio, ya que no estoy solicitando los datos...

me explique ?
  #22 (permalink)  
Antiguo 27/04/2013, 11:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Proyecto: sesiones entre dominios

En ese caso no te va a quedar de otra que hacer la verificación en cada request, yo te recomendaría hacer un servicio REST ya que es más ligero, y puedes usar JSON por ejemplo de una forma más práctica a estar haciendo requests SOAP.

Saludos.
  #23 (permalink)  
Antiguo 22/06/2013, 10:22
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

estuve haciendo pruebas con JSON, y no logro verificar si existe la session

Dominio administrador (PT_check_login.php)
Código PHP:
// verificamos login
if($_SESSION['user'] != '') { // logueado

// JSON
$arr = array('user' => $_SESSION['user'], 'logueado' => 'si');
echo 
json_encode($arr);

// fin logueado
else { // no Logueado

// JSON
$arr = array('user' => 'Sin user!''logueado' => 'no');
echo 
json_encode($arr);

// fin no logueado 

Otro dominio (PT_check_login_verify.php)
Código PHP:
$JSONurl 'PT_check_login.php';
$JSONdata file_get_contents($JSONurl);

var_dump(json_decode($JSONdata)); 

Última edición por softmaster; 22/06/2013 a las 10:32
  #24 (permalink)  
Antiguo 22/06/2013, 12:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Proyecto: sesiones entre dominios

No, esa no es la idea no puedes usar $_SESSION, tienes que realizar otro mecanismo de sesiones en el servidor principal, preferentemente usando una base de datos.

El proceso es sencillo:
- Desde el dominio cliente, primero verificas si existe un token en tu sesión local, si no existe, lo mandas al dominio principal.
- En el dominio principal, haces el login, si es exitoso, generas un token aleatorio, insertas en la base de datos, con un tiempo de vida, y rediriges al dominio cliente indicándole el token.
- En el dominio cliente nuevamente recibes el token, lo guardas en tu sesión local.
- Luego en cada requests mandas el token al servidor principal, para verificar que todavía es válido, y es ahí donde respondes con el JSON si es correcto o no es correcto para decidir en el cliente si proceder o no con la sesión.

Espero con esto veas porque no puedes usar $_SESSION en el servidor principal, necesitas un medio persistente con más control como una base de datos, ya en el cliente sí puedes usar $_SESSION si gustas para guardar datos locales y el token.

Saludos.
  #25 (permalink)  
Antiguo 22/06/2013, 12:45
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 8 meses
Puntos: 270
Respuesta: Proyecto: sesiones entre dominios

Con guardar las sesiones en una base de datos que se vea desde todos los servidores, y pasar el session_id() en las urls (con algún tipo de seguridad incluida), es suficiente.
  #26 (permalink)  
Antiguo 22/06/2013, 12:47
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

entiendo, pasa que note que google, no siempre redirecciona al servidor principal, por ejemplo:

1 - Supongamos que no tengo iniciada session en analytics, ni en youtube.
2 - hago click en login de analytics, me logueo.
3 - si voy a youtube y refresco, me inicia sesion solo, sin redireccionarme a google account.

Como sabe que sesion crear, a cque usuario ? si no tiene ningun dato.

Pense que podia lograr esto haciendo eso del JSON
  #27 (permalink)  
Antiguo 22/06/2013, 13:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Proyecto: sesiones entre dominios

Claro es posible de esa forma, lo que haces es hacer login local, pero confirmando con un WebService atrás, así no es necesario hacer la redirección ni nada, y también lo puedes hacer con JSON pero la base es la misma, necesitas tener un mecanismo central donde monitorear si esta logeado y el tiempo de vida.

Saludos.
  #28 (permalink)  
Antiguo 22/06/2013, 15:17
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 16 años
Puntos: 12
Respuesta: Proyecto: sesiones entre dominios

Mira hasta ahora ya tengo armado (y probado):

- el monitoreo en la base de datos (chequeo token, tiempo de vida, ip, user, etc)
- Arme un login y registro en un dominio principal (y luego voy redireccionando).
- en cada request (de los dominios) voy solicitando datos con JSON (al dominio principal) para ver si esta activa


Entiendo lo que decis, salvo lo del webservice con JSON, ya que lo he intentado y no he podido loguearme sin redireccionar.

he leido y probado como dijiste: REST sevice, SOAP, NUsoap, y todos en realidad se comportan como XML o JSON, de una u otra forma delvuelven datos, Pero no he logrado identificar como saber si hay una sesion activa sin redireccionar con estos leguajes

Etiquetas: dominios, multiples, sesiones
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:36.