2013-01-07 16 views
5

Mi piacerebbe utilizzare WebSecurity + SimpleMembership, ma implementare la possibilità di (facoltativamente) accedere agli utenti tramite un metodo di autenticazione personalizzato/alternativo.Come faccio manualmente "registrare un utente in" usando WebSecurity + SimpleMembership?

WebSecurity.Login ha solo una firma del metodo, che richiede sia un nome utente che una password. Mi piacerebbe saltare il controllo della password, per es .:

if (MyCustomAuthenticationMethod.Authenticate(username, customData)) { 
    WebSecurity.Login(username); // Login without password check, method doesn't exist though 
} 

presumo misura auth-metodi sono possibili esiste dato OAuthWebSecurity, ma non sono sicuro di come fare per attuare la mia.

risposta

8

Beh, si potrebbe semplicemente tornare alla radice di autenticazione e chiamare direttamente

FormsAuthentication.SetAuthCookie 

Questo creerà biscotto e autenticare l'utente. Vedi Asp.net Memebership Authorization without password

+0

FINALMENTE! - Funziona come un incantesimo, grazie mille! – BrainSlugs83

+1

Effettua il login dell'utente, in termini di browser, ma non modifica WebSecurity.CurrentId –

1

Non hanno reso facile l'accesso senza password. Un metodo potrebbe essere quello di rendere il proprio plug-in OAuth costume e semplicemente chiamare con il proprio gettone in questo modo:

OAuthWebSecurity.Login("google", "token", true); 

Potete trovare qui come creare un provider di OAuth personalizzato: http://www.codeguru.com/columns/experts/implementing-oauth-features-in-asp.net-mvc-4.htm

E è possibile sfogliare il codice qui: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/Microsoft.Web.WebPages.OAuth/OAuthWebSecurity.cs

Ecco un frammento da un file OAuthWebSecurity.cs che mostra la struttura interna di come utente è autenticato senza la password

internal static bool LoginCore(HttpContextBase context, string providerName, string providerUserId, bool createPersistentCookie) 
    { 
     var provider = GetOAuthClient(providerName); 
     var securityManager = new OpenAuthSecurityManager(context, provider, OAuthDataProvider); 
     return securityManager.Login(providerUserId, createPersistentCookie); 
    } 

Forse qualcuno là fuori ha già fatto questo plugin.

Problemi correlati