2011-08-07 22 views
1

我很好奇爲什麼我需要創建一個自定義的MembershipProvider,而不應該這樣做,以登錄一個潛在的用戶。不使用自定義成員資格提供程序的ASP.NET MVC登錄控制器方法?

[HttpPost] 
public ActionResult Login(string username, string password) 
{ 
    UserUnitOfWork unitOfWork = new UserUnitOfWork(); 
    User user = unitOfWork.UserRepository.GetByUsername(username); 

    if (user != null) 
    { 
     SaltedHashHelper saltHelper = new SaltedHashHelper(); 
     if (saltHelper.VerifyHashString(username, user.Password, user.Salt)) 
      FormsAuthentication.SetAuthCookie(user.Username, false); 
    } 
    else 
    { 
     // User cannot be verified. 
    } 

    return View(); 
} 

如果我創建一個自定義的MembershipProvider然後我會,因爲我沒有使用asp.net成員表創建一個自定義的MembershipUser。當你不使用aspnet會員表時,我覺得這更讓人頭疼。也許我錯了。

有沒有人看到我的方法上面有什麼問題?我很好奇。

+0

誰說你必須創建一個自定義會員供應商? –

+0

我剛剛得到的印象是「你應該」從我在網上看到的所有東西中去做。 – Dietpixel

+0

不要使用內置的提供者。這裏有一個答案:http://stackoverflow.com/questions/1385042/asp-net-mvc-forms-authentication-authorize-attribute-simple-roles – 2011-09-28 15:15:03

回答

1

您不需要創建自定義成員資格提供程序,您可以使用ASP.NET爲您提供的開箱即用功能。事實上,如果沒有任何其他方式,實施自己的身份驗證方案始終是不可取的。最糟糕的情況是,只需重寫您真正需要改變行爲的提供者方法。

看看OWASP Top 10 for .NET developers part 7: Insecure Cryptographic Storage瞭解更多關於爲什麼這是一個壞主意的更多背景知識。

3

你的方法很好,只要適當地加鹽和散列密碼,並妥善保護自己免受SQL注入。

內置的提供程序將比您的定製構建的身份驗證提供程序更好地測試,並且可能更安全,具體取決於您的實現。

相關問題