Utilizzando il Custom MembershipProvider senza un controllo di Accesso in ASP.NET

StackOverflow https://stackoverflow.com/questions/41652

  •  09-06-2019
  •  | 
  •  

Domanda

Abbiamo avuto una custom MembershipProvider in ASP.NET.Ora ci sono 2 possibili scenari per l'utente possono essere convalidati:

  1. Login utente via login.aspx pagina inserendo il suo nome utente/password.Ho usato Controllo di accesso e collegato con il MyMembershipProvider.Questo funziona alla perfezione.

  2. Un token di autenticazione viene passato tramite un URL nella stringa di query forma a diversi siti web.Per questo ho un sovraccarico in MembershipProvider.Validate(string authenticationToken), che è in realtà la convalida dell'utente.In questo caso non possiamo usare il Controllo di accesso.Ora, come posso usare lo stesso MembershipProvider per convalidare l'utente senza utilizzare il Controllo di accesso?Ho provato a chiamare Validate manualmente, ma questa non è la firma dell'utente.

Ecco il frammento di codice che sto utilizzando

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
    }
}
È stato utile?

Soluzione

Dopo la convalida ha esito positivo, è necessario per accedere l'utente, chiamando FormsAuthentication.Autenticazione: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx

EDIT:È FormsAuthentication.SetAuthCookie:http://msdn.microsoft.com/en-us/library/twk5762b.aspx

Inoltre, per reindirizzare l'utente dove voleva andare, chiamata:FormsAuthentication.RedirectFromLoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx

testo del link

Altri suggerimenti

Si può impostare il proprio FormsAuthenticationTicket se la convalida è successo.

Qualcosa di simile;

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  
    }   
}

Hai ragione nel caso di memorizzazione di auth informazioni come un cookie direttamente.Ma con una forte funzione di hash (ad es.MD5 + SHA1) è grande e sicuro.A proposito, se si utilizzano le sessioni (che è anche solo un hash dei cookie, è possibile collegare auth informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top