Inicio de sesión de subdominio múltiple para contenido, Spring Spring para main

5

Ilustración: mainsite.com y contentsite.com, ambos equipos están siendo desarrollados para la misma compañía. Tendremos que iniciar sesión, etc. en mainsite.com contentsite.com tendrá algún contenido que no está disponible para usuarios que no han iniciado sesión. Pero el inicio de sesión será a través de mainsite.com ¿Cuál es la mejor manera de implementar esto? Algunos usuarios pueden estar en http, queremos que sean redirigidos a la página http en la que estaban, si hacen clic en iniciar sesión. Además de eso necesitamos contentsite.com para saber que un usuario ha iniciado sesión y qué ID hay.

Habrá un trabajo separado en el registro y cambio de perfil que comparte información de mainsite a contentsite.com

Entonces, la pregunta es: ¿es suficiente el nombre de usuario cifrado (después de iniciar sesión para indicar al sitio de contenido que el usuario ha iniciado sesión? ¿agregar sal aleatoria para que no pueda ser falsificada?) 2. ¿Necesita un servicio web para que el contenido pueda verificar el inicio de sesión?

Estamos considerando:

  1. Redirección en el inicio de sesión, por lo que tocamos el segundo sitio y permitimos que coloque cookies http y https. ¿Esto es lo que hace Google (pero solo https) para youtube y otros sitios de Google? ¿O una combinación de dominios de servicios web para llamadas de dominio en segundo plano? ¿Necesitamos llamadas a la API para detener al hombre en el medio o es SSL inicial suficiente? Finalmente, queremos que los usuarios puedan usar la mayor parte del sitio web en http o https además de las páginas de verificación, inicio de sesión y perfil.
  2. complemento de javascript para el dominio de contenido, con el nombre de usuario cifrado AES junto con algún hash. Por lo tanto, no hay redirección, pero cada vez que agregamos una etiqueta de contenido, pasamos a un usuario autenticado encriptado o anónimo que aún no ha iniciado sesión.
  3. oauth o auth0.com u otro esquema, no estoy seguro si lo necesitamos, ya que ya estamos usando un implemento de seguridad de clase mundial creado por un gran co y solo queremos compartir nuestra identificación de usuario de inicio de sesión con otro dominio que sea nuestro.

Observé algunas preguntas sobre lo mismo que esta pregunta del nodo js pero no parecían para encajar exactamente. ¿Hay alguna norma que hayamos omitido?

Estamos utilizando la seguridad de primavera para la tienda principal. El sitio de contenido no tendrá una base de datos, pero compartiremos cierta información de perfil a través de canales no web separados (en el registro y en las llamadas a la API de cambio de perfil).

Para iniciar sesión, el sitio web de la tienda tiene listas las páginas SSL, que lo redirigen a la página original (http o https).

    
pregunta tgkprog 27.07.2014 - 14:12
fuente

2 respuestas

5

Creo que OAuth es tu mejor apuesta; específicamente OAuth2. Puede que sea un poco excesivo, pero hace lo que quieres.

OAuth

  

OAuth proporciona a las aplicaciones cliente un 'acceso delegado seguro' para   recursos del servidor en nombre de un propietario de recursos.

¿Qué significa esto? Tiene una aplicación cliente, contentsite.com, a la que le gustaría dar acceso seguro a través de mainsite.com. El registro de usuarios ya debería estar implementado. Contentsite.com se redirigirá a mainsite.com para iniciar sesión y proporcionará un token de acceso mainsite.com a contentsite.com. Si el usuario cierra la sesión, el token se vuelve inválido, y si se usa, debería redirigirse nuevamente al inicio de sesión.

contentsite.com se registraría en mainsite.com como aplicación y recibiría un valor secreto, así como un ID de cliente. El ID de cliente se utiliza cuando se solicita un token. Los tokens de acceso se utilizan para cualquier otro acceso a recursos una vez otorgado. Descripción general de alto nivel de OAuth2 .

Para lograr todo esto, necesitaría implementar un proveedor OAuth en su sitio principal. Aquí hay un paso a paso con algún código de servidor escrito en Python usando Flask. La implementación del lado del cliente es bastante simple. Dada la identificación del cliente y el secreto, usted realiza una solicitud a su proveedor de OAuth para obtener un token. Aquí hay un enlace a una bonita y pequeña biblioteca de Python , puede Declarar las redirecciones allí mismo del lado del cliente. Simplemente reemplazaría los enlaces específicos de Google con los enlaces específicos de su sitio.

Como dije, podría ser un poco excesivo, pero hace exactamente lo que quieres. Si desea que los usuarios puedan iniciar sesión con cosas como Facebook o Google+ o lo que sea, entonces la funcionalidad está ahí. Además, el estándar OAuth2 requiere que se use SSL / TLS para sus solicitudes. Siempre un plus.

Spring Security

Spring Security OAuth - Página principal
Spring Security OAuth2 - Guía del desarrollador
Spring Security OAuth - Github

Ejemplos conceptuales para OAuth (no Spring Security)

Cómo implementar el inicio de sesión seguro a través de OAuth - Este enlace se centra en el uso de Facebook, Google+, etc. como base para el registro / inicio de sesión. Si quisieras apoyar eso.

Algunas notas sobre implementando un Servidor Node OAuth2 , de Papers.

Este es un buen recurso para bibliotecas OAuth para diferentes idiomas, servidor y cliente.

OAuth2 RFC : si te gusta leer RFC

    
respondido por el RoraΖ 22.08.2014 - 14:36
fuente
1

Si tiene una configuración HTTPS para sus páginas de inicio de sesión, no hay una razón válida por la que no pueda mantenerla en todo el sitio web. Si un usuario visita una página sin cifrar con un identificador / token de sesión específico, ¿qué impide que un adversario falsificado robe ese token y luego visite el sitio web?

Y no se trata solo de que se observe el token, sino también del hecho de que no puede decir cuál de las dos solicitudes HTTP con el mismo token es "legítima", mientras que puede saber que cuando tiene un cifrado existente la conexión asociada con un token de sesión no espera que se inicie otra sesión SSL en otro lugar y el otro extremo de esa sesión envíe un token de sesión existente.

    
respondido por el Steve DL 22.08.2014 - 13:29
fuente

Lea otras preguntas en las etiquetas