Iniciar sesión automáticamente en el sitio web actual si el usuario está conectado a otro sitio web

Tengo alrededor de 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.

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 que pueda ver el formulario de pago completado . 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 ha iniciado sesión en el sitio web de referencia utilizando ASP clásico?


Larga historia corta

  • En el sitio web BI, debe verificar si el visitante está conectado al sitio web A
  • En el sitio web BI necesita la variable de sesión de ID del sitio web A
  • Ambos 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

Desde el sitio que llama, puede crear un guid o algún 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 usar sesiones. Como todos están en la misma máquina, es posible, pero no estoy 100% seguro de eso.

Lo que usted solicitó se llama inicio de sesión único (SSO) y se puede implementar de varias maneras. Hay muchos temas sobre este tema, por ejemplo: ¿Cuál es su enfoque de intercambio de cookies de dominio cruzado favorito? pero todos varían según los requisitos individuales.

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

Así que recomendaría considerar la sugerencia de Robert:

  1. Cuando el usuario se autentica por primera vez (sitio web A) 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 tratar de omitir el paso 2 y validar al usuario por su ip, pero esto podría ser demasiado arriesgado.

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:

Proveedor de autenticación de pasaportes

Si no puede implementar un inicio de sesión único en su nivel de infraestructura, debe usar Identity Federation, que permite que las aplicaciones de diferentes partes confiables compartan la autenticación mediante reclamos.

Esto se puede hacer utilizando el Lenguaje de marcado de aserción de seguridad (SAML) directamente o con productos / estándares como:

  • SimpleSAMLphp
  • Servicios de federación de Active Directory

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