Em ASP.NET;Como posso fazer login de uma página HTML remota em outra página ASPX com Associação ASP.NET
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!
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:
- Compreendendo o cookie e o tíquete de autenticação de formulários - MSDN
- Explicado: Autenticação de formulários em ASP.NET 2.0 - MSDN
- Examinando membros, funções e perfil do ASP.NET - 4guysfromrolla
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:
- Há um mapeamento configurado com o Routing ou o web.config que chamará este manipulador.
-
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 nomeusername
e umpassword
campo de entrada com o nomepassword
.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; } } }