2013-01-07 1 views
5

Ich möchte WebSecurity + SimpleMembership verwenden, aber die Möglichkeit implementieren, Benutzer (optional) über eine benutzerdefinierte/alternative Authentifizierungsmethode anzumelden.Wie melde ich manuell einen Benutzer mit WebSecurity + SimpleMembership?

WebSecurity.Login hat nur eine Methodensignatur, die sowohl einen Benutzernamen als auch ein Passwort erfordert. Ich möchte die Passwortüberprüfung überspringen, z.B .:

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

Ich gehe davon aus custom-auth-Methoden sind möglich gegeben OAuthWebSecurity existiert, aber ich bin nicht sicher, wie die Umsetzung meiner eigenen zu gehen.

Antwort

8

Nun, man könnte einfach zurück zur Wurzel der Authentifizierung gehen und rufen Sie direkt

FormsAuthentication.SetAuthCookie 

Dieses Cookie erstellen und Ihre Benutzer authentifizieren. Siehe Asp.net Memebership Authorization without password

+0

ENDLICH! - Das wirkt wie ein Zauber, vielen Dank! – BrainSlugs83

+1

Es protokolliert den Benutzer in Bezug auf den Browser, aber WebSecurity.CurrentId wird nicht geändert –

1

Sie haben es nicht einfach gemacht, sich ohne ein Passwort anzumelden. Eine Methode könnte es sein, Ihre eigenen OAuth-Plug-in zu machen und einfach nennen es mit Ihrem eigenen Token wie folgt aus:

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

Sie hier finden, wie eine benutzerdefinierte OAuth-Anbieter erstellen: http://www.codeguru.com/columns/experts/implementing-oauth-features-in-asp.net-mvc-4.htm

Und Sie können den Code hier sehen: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/Microsoft.Web.WebPages.OAuth/OAuthWebSecurity.cs

hier ein Ausschnitt aus OAuthWebSecurity.cs Datei, die die Interna zeigt, wie Benutzer ohne Passwort authentifiziert wird:

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

Vielleicht hat schon jemand da draußen dieses Plugin gemacht.