2011-02-11 11 views
14

Tengo un dominio http://abc.com y un subdominio http://sub.abc.com. Estoy implementando el inicio de sesión único entre los dos sitios al compartir la cookie de autenticación de formularios. Esto se implementa haciendo que ambos sitios compartan validationKey y decryptionKey en machineKey.Autenticación de formularios ReturnUrl y subdominio para el inicio de sesión único

Cuando el usuario accede a una página del subdominio, quiero que el usuario se autentique en el dominio raíz y se le redirija de nuevo al subdominio. El usuario se redirige a la página de inicio de sesión actualmente pero el ReturnUrl desea redirigir al sitio raíz.

Por ejemplo. Actualmente: http://abc.com/login.aspx?ReturnUrl=%2fsecure%2fdefault.aspx

pero quiero: http://abc.com/login.aspx?ReturnUrl=http:%2f%2fsub.abc.com%2fsecure%2fdefault.aspx

¿Cómo se puede lograr?

En web.config de mi subdominio que tienen la autenticación configurado actualmente como esto:

<authentication mode="Forms"> 
    <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" /> 
</authentication> 
+0

Si desea que las cookies de abc.com sean accesibles a sub.abc.com, creo que deberá configurar el dominio como ".abc.com" en lugar de simplemente como "abc.com". Sin embargo, no estoy seguro del regreso. Puede que tenga que hacerlo manualmente al marcar el UrlReferer. –

+0

¿no necesitarías un comodín como * .abc.com para el dominio? – Gallen

+0

@Daniel Schaffer, ¿tendré que configurar ".abc.com" en las configuraciones de ambos sitios? ¿O solo el subdominio? – LordHits

Respuesta

14

que resolvieron este estableciendo una querystring en mi elemento de formularios de mi s ubdomain:

<authentication mode="Forms"> 
    <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx?returnsite=sub" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" /> 
</authentication> 

Luego, en mi código de autenticación en mi sitio web principal, puedo comprobar que la cadena de consulta. Si existe, creo la url de redirección al agregar mi subdominio a returnurl.

Que la querystring de returnsite realmente solo está actuando como una bandera que necesito redirigir a un subdominio conocido, de lo contrario funcionará solo con la redirección del dominio actual. Esto debería (en teoría) evitar la creación de scripts entre sitios.

+0

me gusta esta mejor que las otras soluciones, ya que no expone un método genérico de volver a dirigir a un lugar no autorizado, que es una herramienta importante para los ataques phising. –

1

Puede solucionar este problema al pasar un vale de autenticación en un parámetro de cadena de consulta en lugar de en una cookie. This may help you

ACTUALIZACIÓN
Ahora mira este enlace http://www.developer-corner.com/development/dotnet/single-sign-on-across-multiple-asp-net-applications/


ACTUALIZACIÓN
También puede utilizar el método FormsAuthentication.GetRedirectUrl

+0

Esto parece un poco complicado. La cadena de consulta puede llegar a ser extremadamente larga si el valor de la cookie está allí. Mi problema no es realmente la cookie que he podido compartir entre dominios.Solo se trata de obtener la cadena de consulta ReturnURL para que sea correcta. – LordHits

+1

bien ahora mira este enlace http://www.developer-corner.com/development/dotnet/single-sign-on-across-multiple-asp-net-applications/ – Student

+0

que es una buena lectura de inicio de sesión único, sino que doesn Respondo mi pregunta con respecto a ReturnURL. – LordHits

Cuestiones relacionadas