visual tutorial studio net custom asp c# asp.net asp.net-membership membership

c# - tutorial - ¿Cómo se pasa una sesión autenticada entre los dominios de la aplicación?



membership asp net visual studio 2015 (8)

Alternativamente, si quiere hacer su propia versión y los sitios en cuestión no están en los mismos servidores o no tienen acceso a una base de datos compartida (en cuyo caso, vea las respuestas anteriores), entonces podría colocar una baliza web en cada uno de los sitios que se referiría al otro sitio.

Coloque una imagen de un solo píxel (baliza web) en el sitio A que llamaría al sitio B que pasa a través de la identificación de los usuarios (encriptada y marcada con el tiempo). Esto crearía una nueva sesión de usuario en el sitio B para el usuario, que se establecería como iniciada. Luego, cuando el usuario visitara el sitio B, ya estaría conectado.

Para minimizar las llamadas, solo puede colocar el web beacon en la página de inicio y / o iniciar sesión en las páginas de confirmación. Lo utilicé con éxito en el pasado para pasar información entre sitios asociados.

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

Digamos que un usuario va a www.abc.com y se autentica a través del proveedor de membresía ASP .NET normal.

Luego, desde ese sitio, se envían a (redirección, vinculado, lo que sea que funcione) al sitio www.xyz.com, y la intención del sitio www.abc.com era pasar ese usuario al otro sitio a medida que se autentica el estado, para que el sitio www.xyz.com no solicite nuevamente las credenciales de dicho usuario.

¿Qué se necesitaría para que esto funcione? Sin embargo, tengo algunas limitaciones sobre esto, las bases de datos de los usuarios están completamente separadas, no es interno a una organización, en todos los aspectos, es como pasar de stackoverflow.com a google como autenticado, es de naturaleza separada. Un enlace a un artículo relevante será suficiente.


Existen varios enfoques para este problema, que se describe como "inicio de sesión único entre dominios". El artículo de wikipedia señalado por Matej es particularmente útil si estás buscando una solución de código abierto; sin embargo, en un entorno Windows, creo que es mejor que lo hagas con uno de los dos enfoques:

  1. Compre un producto SSO comercial (como SiteMinder o PingIdentity)
  2. Utilice la solución de SSO entre dominios de MicroSoft, llamada ADFS - Active Direcctory Federation Services. (federación es el término para coordinar el comportamiento de múltiples dominios)

He usado SiteMinder y funciona bien, pero es caro. Si estás en un entorno totalmente MicroSoft, creo que ADFS es tu mejor opción. Comience con este documento técnico de ADFS .


Intente usar FormAuthentication configurando la sección de autenticación web.config así:

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

Genera una clave de máquina. Ejemplo: La forma más fácil de generar MachineKey: consejos y trucos: ASP.NET, IIS ...

Al publicar en la otra aplicación, el ticket de autenticación se pasa como un campo oculto. Al leer la publicación desde la primera aplicación, la segunda aplicación leerá el ticket encriptado y autenticará al usuario. Aquí hay un ejemplo de la página que pasa y publica 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 vea la sección de autenticación de formulario de la aplicación cruzada en el Capítulo 5 de este libro de Wrox. Recomienda respuestas como las anteriores, además de proporcionar una solución SSO casera.


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

El enfoque de cómo hacer esto generalmente se denomina inicio de sesión único (ver Wikipedia ).


No estoy seguro de qué usarías para .NET, pero normalmente usaría memcached en una pila LAMP.


Si almacena sesiones de usuario en la base de datos, simplemente puede verificar la existencia del Guid en la tabla de la sesión, si existe, entonces el usuario ya se habrá autenticado en el otro dominio. Para que esto funcione, debería incluir el guid de sesión en la URL cuando redirija al usuario al otro sitio web.


Si está utilizando el sistema integrado de membresía, puede realizar la autenticación de subdominios cruzados con auth de formularios utilizando algunos como este en cada web.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, la protección y el dominio sean los mismos en todos los web.configs. Si los sitios están en máquinas diferentes, también deberá asegurarse de que la máquina clave y las claves de validación y encriptación sean las mismas.