Pregunta

Básicamente, necesito iniciar sesión en otro dominio que utilice la membresía de asp.net.

Si tenemos una aplicación web ASP.net que usa Membresía ASP.Net por un lado, y una página HTML de otro dominio por otro lado.

¿Es posible iniciar sesión en el sitio web ASP.NET a través de una página HTML remota?

He hecho esto con Coldfusion antes, pero la membresía de ASP.NET usa un control de servidor.

¡Salud!

¿Fue útil?

Solución

Debajo del control del servidor de inicio de sesión, ASP.NET usa una implementación de MembershipProvider y autenticación de formularios para un usuario con membresía ASP.NET. Puede replicar estos pasos sin usar el Control del servidor de inicio de sesión, validando manualmente las credenciales y luego adjuntando la cookie FormsAuthentication al Response.

Estos son algunos recursos que deberían ayudarlo a comenzar:

Probablemente también se beneficiaría de Reflexionar sobre la fuente del control Login, para que pueda comprender la secuencia exacta de eventos que ocurren cuando un usuario inicia sesión usando el control del servidor. Esto debería facilitarle la comprensión de cómo replicar esa funcionalidad para su caso de uso particular.

Como nota al margen, recomendaría utilizar una implementación personalizada de IHttpHandler como punto de inyección para procesar la solicitud de inicio de sesión, pero hay muchas formas de realizar esta tarea .

Actualización, me siento generoso, así que

A continuación, se muestra un controlador de ejemplo que puede utilizar para iniciar la sesión de un usuario con Membresía ASP.NET y FormsAuthentication (al igual que el control del servidor).

Este código asume:

  1. Hay una asignación configurada con Routing o web.config que llamará a este controlador.
  2. La página solicitante tiene un formulario que apunta a la URL / ruta que está mapeada en web.config o con el enrutamiento, y que el formulario en esa página contiene un campo de entrada username con el nombre username y un password campo de entrada con el nombre password.

        public class LoginHandler : IHttpHandler
        {
            void IHttpHandler.ProcessRequest(HttpContext context)
            {
                string username = context.Request["username"];
                string password = context.Request["password"];
                if (!string.IsNullOrWhiteSpace(username) && !string.IsNullOrWhiteSpace(password) && Membership.Provider.ValidateUser(username, password))
                {
                    FormsAuthentication.SetAuthCookie(username, true);
                    RenderUserLoggedInResponse(context.Response,username);
                }
                else FormsAuthentication.RedirectToLoginPage("loginfailure=1");
            }
            private static void RenderUserLoggedInResponse(HttpResponse response, string username)
            {
                response.Write(string.Format("You have logged in successfully, {0}!", username));
                response.End();
            }
    
            bool IHttpHandler.IsReusable { get { return true; } }
        }
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top