2013-01-07 22 views
5

Tôi muốn sử dụng WebSecurity + SimpleMembership, nhưng thực hiện khả năng (tùy chọn) người dùng đăng nhập thông qua phương thức xác thực tùy chỉnh/thay thế.Làm cách nào để "đăng nhập người dùng" theo cách thủ công bằng WebSecurity + SimpleMembership?

WebSecurity.Login chỉ có một chữ ký phương thức, yêu cầu cả tên người dùng và mật khẩu. Tôi muốn bỏ qua việc kiểm tra mật khẩu, ví dụ .:

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

tôi giả tùy chỉnh-auth-phương pháp này có thể OAuthWebSecurity cho tồn tại, nhưng tôi không chắc chắn làm thế nào để đi về việc thực hiện của riêng tôi.

Trả lời

8

Vâng, bạn chỉ có thể quay trở lại gốc rễ của chứng thực và gọi trực tiếp

FormsAuthentication.SetAuthCookie 

này sẽ tạo ra cookie và xác thực người dùng của bạn. Xem Asp.net Memebership Authorization without password

+0

CUỐI CÙNG! - Điều này làm việc như một say mê, cảm ơn bạn rất nhiều! – BrainSlugs83

+1

Nó đăng nhập người dùng trong, về trình duyệt, nhưng nó không thay đổi WebSecurity.CurrentId –

1

Chúng không giúp bạn dễ dàng đăng nhập mà không cần mật khẩu. Một phương pháp có thể để làm của riêng tùy chỉnh OAuth plug-in của bạn và chỉ cần gọi nó với dấu hiệu của riêng bạn như thế này:

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

Bạn có thể tìm thấy ở đây làm thế nào để tạo ra một nhà cung cấp tùy chỉnh OAuth: http://www.codeguru.com/columns/experts/implementing-oauth-features-in-asp.net-mvc-4.htm

Và bạn có thể duyệt mã ở đây: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/Microsoft.Web.WebPages.OAuth/OAuthWebSecurity.cs

Dưới đây là một đoạn trích từ tập tin OAuthWebSecurity.cs cho thấy bên trong của làm thế nào để sử dụng được xác thực mà không cần mật khẩu:

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

Có lẽ ai đó đã thực hiện plugin này.