Pergunta

Basicamente, preciso fazer login em outro domínio que esteja usando a associação do asp.net.

Se tivermos um aplicativo da web ASP.net usando ASP.Net Membership por um lado, e uma página HTML de outro domínio, por outro lado.

É possível fazer login no site ASP.NET por meio da página HTML remota.

Já fiz isso com Coldfusion antes, mas a associação ASP.NET usa um controle de servidor.

Saúde!

Foi útil?

Solução

Sob o controle de servidor de login, o ASP.NET usa uma implementação de MembershipProvider e autenticação de formulários para um usuário com associação ao ASP.NET. Você pode replicar essas etapas sem usar o Login Server Control, validando manualmente as credenciais e anexando o cookie FormsAuthentication ao Response.

Aqui estão alguns recursos que devem ajudá-lo a começar:

Você provavelmente também se beneficiaria refletindo sobre a origem do controle Login, para que possa entender a sequência exata de eventos que acontece quando um usuário efetua login usando o controle do servidor. Isso deve tornar mais fácil para você entender como replicar essa funcionalidade para seu caso de uso específico.

Como observação, eu recomendaria usar uma implementação IHttpHandler personalizada como um ponto de injeção para processar a solicitação de login, mas existem muitas maneiras de realizar essa tarefa .

Atualização, estou me sentindo generoso, então

Abaixo está um exemplo de manipulador que você pode usar para fazer o login de um usuário com ASP.NET Membership e FormsAuthentication (assim como o controle de servidor).

Este código pressupõe:

  1. Há um mapeamento configurado com o Routing ou o web.config que chamará este manipulador.
  2. A página solicitante tem um formulário que aponta para a url / rota mapeada no web.config ou com roteamento e que o formulário dessa página contém um campo de entrada username com o nome username e um password campo de entrada com o nome 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top