2011-12-23 41 views
9

Tengo aproximadamente 100 sitios web codificados en ASP clásico. Cada sitio web acepta pedidos y los almacena en la base de datos. Sin embargo, el pago de estos pedidos debe hacerse en otro sitio web, también codificado en ASP clásico. Todos los sitios web son propiedad de la misma empresa, alojados en el mismo servidor IIS y utilizan la misma base de datos de SQL Server.Inicie sesión automáticamente en el sitio web actual si el usuario ha iniciado sesión en otro sitio web

Ahora, el usuario se registra ingresando información personal e inicia sesión en uno de estos sitios web (por ejemplo, website-for-newjersey.com) y realiza un pedido. A continuación, se lo redirige al sitio web de pagos (payments.master-website.com en https), donde parte de su información personal (dirección, ciudad, estado de envío, nombre del titular de la tarjeta de crédito, etc.) aparece en el formulario de pago. La información específica de la tarjeta de crédito se ingresa en esa página.

Debido a la sensibilidad de la información que se muestra en esa página, el usuario debe iniciar sesión en el sitio web de pago antes de poder ver el formulario de pago prellenado. Y no quiero que el usuario inicie sesión dos veces (una vez en cada sitio web). ¿Existe alguna manera confiable de verificar si el usuario está conectado al consultando el sitio web usando ASP clásico?


Larga historia corta

  • sitio web de BI necesita comprobar si el visitante se registra en el sitio web Un
  • sitio web de BI necesita la variable de identificación de sesión en el sitio web Un
  • Tanto sitios web usan el mismo servidor de base de datos
  • Necesito instrucciones claras
  • La solución PHP o ASP.NET es aceptable si es genérica/portátil
+2

¿por qué no sigues la sugerencia de roberts? es un enfoque excelente y no puedes compartir sesiones entre diferentes dominios, de lo contrario, podrías robar la sesión de Facebook de alguien o algo así. Siempre que esté a punto de pagar, haga lo que Robert dijo. almacenar una cadena aleatoria en su base de datos relacionada con ese usuario. Cifrelo, vaya a través de SSL a su nuevo sitio web, descifrelo y busque el usuario en la base de datos. También verifique con el tiempo (como dentro de 1-2 minutos después de la creación) – Muqito

+1

¿Ha oído hablar de algo llamado Session Bridge? – TechGirl

+0

@TechGirl: no, no. –

Respuesta

9

Desde el sitio que llama puede crear un guid u otro valor generado aleatoriamente. Guárdelo en el registro de usuarios (configurado para caducar en un período de tiempo específico) en la base de datos, encripte y transfiéralo a través de SSL al sitio de pago donde se descifra y luego se compara con la base de datos. Si coinciden, el usuario ha iniciado sesión, si no coincide, se le pedirá que inicie sesión.

Otra forma, aunque no estoy seguro de que se pueda hacer con diferentes nombres de dominio, es utilizar sesiones. Como todos están en la misma máquina, es posible, pero no estoy 100% seguro de eso.

+0

Las sesiones caducan al tocar un nombre de dominio diferente, incluso subdominios. – TheCarver

+0

Esto funciona. Sin embargo, ¿qué sucede si alguien copia un token legítimo (y encriptado) del sitio web A, abre el sitio web B en otro navegador/computadora y publica el token (encriptado)? –

+1

Puede usar cierta información de computadora/navegador en el valor encriptado que luego, al descifrar, valida que la persona aún se encuentre en la misma máquina. Publicarlo sobre SSL debe tener otra capa de cifrado. – Robert

4

Lo que ha pedido se denomina inicio de sesión único (SSO) y se puede implementar de varias maneras. Hay muchos temas sobre este tema, por ejemplo: What's your favorite cross domain cookie sharing approach?, pero todos varían según los requisitos individuales.

En su caso tiene diferentes dominios (por lo que no puede compartir cookies entre ellos), mezcla http y https (que podría ser un problema) y tiene muchas aplicaciones, por lo que no hará muchos cambios.

Por lo que recomiendo tener en cuenta la sugerencia de Robert:

  1. Cuando el usuario se autentica por primera vez (página web A) se guarda un GUID en la base de datos. Agregue una nueva tabla para las sesiones con columnas para GUID, ID de usuario, IP e indicación de fecha y hora o guárdela como parte de los datos de órdenes. Almacenar GUID en el objeto de sesión.
  2. En la página que tenía un enlace al sitio de pago, configúrelo en la cadena de consulta o como una variable oculta (si se trata de un formulario).
  3. En el otro dominio (sitio web B) busque el GUID y luego búsquelo en la base de datos. Si no era demasiado viejo, autentique al usuario, de lo contrario redirigirlo a una página de inicio de sesión.

Si no puede cambiar un enlace al sitio de pago, puede intentar omitir el paso 2 y validar al usuario por su ip, pero esto podría ser demasiado arriesgado.

+0

Esto parece simple. Sin embargo, ¿qué sucede si alguien copia un token legítimo del sitio web A, abre el sitio web B en otro navegador/computadora y publica el token? –

+0

Una combinación de (valida IP + check referer + use POST) debería hacerlo. También puede eliminar el GUID de la base de datos cuando el usuario fue validado, por lo que el mismo GUID (url) no se puede volver a utilizar. – Alex

+1

@SalmanA: no guarda el GUID. En su lugar, guarda * y actualiza * un * UUID aleatorio * generado cada vez por el sitio fuente en el redireccionamiento. Luego purga el UUID del DB al recibirlo en el sitio de destino. Esto significa que su usuario malicioso debería * bloquear * su propia redirección (de lo contrario, el UUID se desactivaría), ** y ** debe copiar y publicar el GUID desde otra computadora dentro de, digamos, 5 segundos. Una redirección 302 normal no dura tanto, por lo que todos los UUID mayores de unos pocos segundos pueden considerarse inválidos. – LSerni

1

La autenticación basada en puerto de acceso es un servicio de autenticación centralizado proporcionado por Microsoft que ofrece un inicio de sesión único y servicios de perfil principal para sitios miembros. Para obtener más información, consulte el siguiente sitio Web de Microsoft:

Passport Authentication Provider

+0

La autenticación de pasaporte está obsoleta y ha sido reemplazada por Live ID. Se requeriría una cuenta de Live ID que es diferente de lo que se solicitó aquí. – Alex

1

Si no puede implementar un inicio de sesión único en su nivel de infraestructura, se debe utilizar Identity Federation que permite a las aplicaciones de diferente parte de confianza para compartir la autenticación a través de reclamos.

Esto se puede hacer usando Security Assertion Markup Language (SAML) directamente o con productos/normas como:

También puedes echar un vistazo a OAuth o OpenID que son más esquemas de autenticación compartidos que SSO o federación de identidades.

Cuestiones relacionadas