Pergunta

Temos um costume MembershipProvider em ASP.NET.Agora existem 2 cenários possíveis em que o usuário pode ser validado:

  1. Login do usuário através login.aspx página digitando seu nome de usuário/senha.Eu tenho usado Controle de login e relacionou-o com o MyMembershipProvider.Isso está funcionando perfeitamente bem.

  2. Um token de autenticação é passado por meio de algum URL na string de consulta de diferentes sites.Para isso eu tenho uma sobrecarga em MembershipProvider.Validate(string authenticationToken), que na verdade está validando o usuário.Neste caso não podemos usar o Controle de login.Agora, como posso usar o mesmo MembershipProvider para validar o usuário sem realmente usar o Controle de login?eu tentei ligar Validate manualmente, mas isso não significa fazer login do usuário.

Aqui está o trecho de código que estou usando

if (!string.IsNullOrEmpty(Request.QueryString["authenticationToken"])) {
    string ticket = Request.QueryString["authenticationToken"];
    MyMembershipProvider provider = Membership.Provider as MyMembershipProvider;
    if (provider != null) {
        if (provider.ValidateUser(ticket))
            // Login Success
        else
            // Login Fail
    }
}
Foi útil?

Solução

Depois que a validação for bem-sucedida, você precisará fazer login do usuário, chamando FormsAuthentication.Authenticate: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx

EDITAR:É FormsAuthentication.SetAuthCookie:http://msdn.microsoft.com/en-us/library/twk5762b.aspx

Além disso, para redirecionar o usuário de volta para onde ele queria ir, chame:FormsAuthentication.RedirectFromLoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx

Texto do link

Outras dicas

Você pode definir o seu próprio FormsAuthenticationTicket se a validação for bem-sucedida.

Algo assim;

if (provider != null) {
    if (provider.ValidateUser(ticket)) {
        // Login Success
        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
            1, //version
            someUserName, //name
            DateTime.Now, //issue date
            DateTime.Now.AddMinutes(lengthOfSession), //expiration
            false, // persistence of login
            FormsAuthentication.FormsCookiePath
        );

        //encrypt the ticket
        string hash = FormsAuthentication.Encrypt(authTicket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);

        Response.Cookies.Add(cookie);
        Response.Redirect(url where you want the user to land);
    } else {
        // Login Fail  
    }   
}

Você está certo no caso de armazenar as informações de autenticação diretamente como um cookie.Mas usando uma função hash forte (por exemploMD5 + SHA1) é excelente e seguro.A propósito, se você usar sessões (que também é apenas um cookie hash), poderá anexar informações de autenticação a ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top