2013-01-07 11 views
5

Chciałbym użyć WebSecurity + SimpleMembership, ale zaimplementować możliwość (opcjonalnie) logowania użytkowników za pomocą niestandardowej/alternatywnej metody uwierzytelniania.Jak ręcznie "zalogować użytkownika" za pomocą WebSecurity + SimpleMembership?

WebSecurity.Login ma tylko jeden podpis metody, który wymaga zarówno nazwy użytkownika, jak i hasła. Chciałbym, aby pominąć sprawdzanie hasła, np .:

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

Zakładam możliwe są podane OAuthWebSecurity istnieje zwyczaj-auth-metod, ale nie jestem pewien, jak go o wdrażaniu własnego.

Odpowiedz

8

Cóż, może po prostu wrócić do korzeni uwierzytelniania i zadzwonić bezpośrednio

FormsAuthentication.SetAuthCookie 

To stworzy ciasteczko i uwierzytelnić użytkownika. Zobacz Asp.net Memebership Authorization without password

+0

WRESZCIE! - To działa jak urok, dziękuję bardzo! – BrainSlugs83

+1

Loguje użytkownika pod względem przeglądarki, ale nie zmienia WebSecurity.CurrentId –

1

Nie ułatwiały logowania bez hasła. Jedną z metod może być zrobić własny zwyczaj OAuth plug-in i po prostu nazwać to z własnego tokena tak:

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

Można tu znaleźć jak tworzyć dostawcy zwyczaj OAuth: http://www.codeguru.com/columns/experts/implementing-oauth-features-in-asp.net-mvc-4.htm

I można przeglądać kod tutaj: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/Microsoft.Web.WebPages.OAuth/OAuthWebSecurity.cs

Oto fragment z pliku OAuthWebSecurity.cs który pokazuje wnętrzności jak uwierzytelnieniu użytkownika bez hasła:

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

Być może ktoś już zrobił tę wtyczkę.

Powiązane problemy