Pregunta

Digamos que tienen sitios web www.xyz.com y www.abc.com.

Digamos que un usuario va a www.abc.com y autenticación a través de la normal ASP .RED del proveedor de pertenencia.

Entonces, desde ese sitio, se los envía a (redirección, vinculado, lo que trabaja) sitio www.xyz.com y la intención de sitio www.abc.com iba a pasar por ese usuario a otro sitio como el estado de isAuthenticated, por lo que el sitio www.xyz.com no pide las credenciales de usuario de nuevo.

Lo que sería necesario para que esto funcione?Tengo algunas restricciones en esto, sin embargo, las bases de datos de usuario son completamente independientes, no es la interna de una organización, en todos los aspectos, es como pasar de stackoverflow.com a google como autenticado, es que independiente de la naturaleza.Un enlace a un artículo relevante será suficiente.

¿Fue útil?

Solución

Trate de usar FormAuthentication por la configuración de la web.de configuración de la autenticación de la sección así:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" requireSSL="true" 
      protection="All" 
      enableCrossAppRedirects="true" />
</authentication>

Generar una clave de equipo.Ejemplo: Forma más sencilla de generar MachineKey – Consejos y trucos:ASP.NET, IIS ...

Cuando la publicación a la otra aplicación el vale de autenticación se pasa como un campo oculto.Al leer el post desde la primera aplicación, la segunda aplicación va a leer el vale cifrado y la autenticación del usuario.He aquí un ejemplo de la página que pasa que los puestos en el campo:

.aspx:

<form id="form1" runat="server">
  <div>
    <p><asp:Button ID="btnTransfer" runat="server" Text="Go" PostBackUrl="http://otherapp/" /></p>
    <input id="hdnStreetCred" runat="server" type="hidden" />
  </div>
</form>

código-detrás:

protected void Page_Load(object sender, EventArgs e)
{
    FormsIdentity cIdentity = Page.User.Identity as FormsIdentity;
    if (cIdentity != null)
    {
        this.hdnStreetCred.ID = FormsAuthentication.FormsCookieName;
        this.hdnStreetCred.Value = FormsAuthentication.Encrypt(((FormsIdentity)User.Identity).Ticket);
    }
}

También ver la cruz de la aplicación del formulario de autenticación de la sección en el Capítulo 5 de este libro de Wrox.Se recomienda respuestas como estas, además de proporcionar un homebrew solución SSO.

Otros consejos

Si usted está utilizando el construido en el sistema de membresía que usted puede hacer cross sub-dominio de autenticación de formularios de autenticación mediante el uso de algo como esto en la web de cada uno.config.

<authentication mode="Forms">
    <forms name=".ASPXAUTH" loginUrl="~/Login.aspx" path="/" 
                  protection="All" 
                  domain="datasharp.co.uk" 
                  enableCrossAppRedirects="true" />

</authentication>

Asegúrese de que el nombre, la ruta de acceso, la protección y el dominio son los mismos en todas las web.configs.Si los sitios están en máquinas diferentes, usted también tendrá que asegurarse de que el machineKey y claves de cifrado y validación son los mismos.

Si almacena las sesiones de usuario en la base de datos, simplemente puede comprobar la existencia de un Guid en la tabla de sesión, si existe, el usuario ya autenticado en el dominio de otra.Para que esto funcione, usted tendría que incluye la sesión guid en la dirección URL cuando usted redirigir al usuario a otro sitio web.

No estoy seguro de lo que se utiliza para .NET, pero normalmente yo uso memcached en una pila LAMP.

La resolución depende del tipo de aplicación y el entorno en el que se está ejecutando.E. g.en la intranet con Dominio de NT puede utilizar NTLM para pasar las credenciales de windows directamente a los servidores de la intranet de perímetro, sin necesidad de duplicar las sesiones.

El enfoque de cómo hacer esto es generalmente nombrado el inicio de sesión único (ver Wikipedia).

Hay varios enfoques a este problema, que se describe como "Cross-dominio de inicio De sesión Único".El artículo de la wikipedia señalado por Matej es particularmente útil si usted está buscando una solución de código abierto - sin embargo - en un entorno de windows creo que está mejor que con uno de los 2 enfoques:

  1. Comprar un comercial de SSO producto (como SiteMinder o PingIdentity)
  2. Uso de MicroSoft cruz del dominio de la solución SSO, llamado ADFS - Activo Direcctory De La Federación De Servicios.(federación es el término para coordinar el comportamiento de varios dominios)

He utilizado SiteMinder y funciona bien, pero es caro.Si estás en un entorno MicroSoft creo ADFS es su mejor apuesta.Inicio con este ADFS whitepaper.

Me gustaría usuario algo como CAS:

[1]: http://www.ja-sig.org/products/cas/ CAS

Este es un problema resuelto y no es recomendable rodar su propio.

Alternativamente, si quieres lanzar tu propio y de los sitios en cuestión no están en los mismos servidores, o que no tienen acceso a una base de datos compartida (en cuyo caso ver las respuestas anteriores), a continuación, usted puede colocar una baliza web en cada uno de los sitios a los que remito de nuevo a otro sitio.

Coloque un solo píxel de la imagen ("web beacon") en el sitio que se llamaría el sitio B que pasa a través de la IDENTIFICACIÓN de usuarios (cifrado & sello de tiempo).Este sería, a continuación, crear una nueva sesión de usuario en el sitio B para el usuario que se podría establecer como se registra en.Luego, cuando el usuario visitó el sitio B que ya se ha iniciado la sesión.

Para minimizar las llamadas sólo se podía colocar la baliza web en la página de inicio y / o iniciar sesión en páginas de confirmación.La he usado con éxito en el pasado para pasar información entre los sitios de los socios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top