2010-12-23 47 views
0

我無法想象,不存在一個高效,輕量,安全的ASP.NET應用程序認證和授權庫,易於使用例如你的控制器和視圖。我讀了大量的文章,並且執行了數十萬次搜索,但是還沒有找到。有誰知道這樣的圖書館?還是有人自己創造一個,並願意分享?安全,輕量級,易於使用的身份驗證系統爲asp.net

ASP.NET身份驗證系統主要基於用戶名而不是UserId。我真的不明白這一點。想象一下,你想創建一個評論博客。用戶可以註冊並發表評論。兩個衆所周知的MVC示例(Nerddinner和MVC音樂商店)使用默認的asp.net認證系統(membershipprovider/identy/principal等)並使用用戶名來存儲屬於某個對象的用戶,例如, 「HostedBy」 - 場。

對我來說,這似乎不是一個很好的做法:

  1. 這是不可能改變的用戶名,而不必改變所有的相關記錄。

  2. 爲什麼不把我們一個int作爲ID?您只需8個字節即可存儲1600萬用戶。除非您將用戶名限制爲8個字節字符,否則就存儲空間而言效率較低。

  3. 基於字符串的關係似乎效率不高,因爲基於字符串的查找比基於整數的查找慢。

奧凱,我能想象你爲什麼要使用GUID,而不是一個int,因爲那幾乎是不可能的猜測和記憶,並且可能提高安全性以某種方式;如果這是原因,那對我來說很好。

但是,然後仍然是爲什麼IIdentity接口只提供用戶名而不是UserId的問題。如果將UserId用作外鍵,則很難獲取當前登錄用戶的所有帖子列表:您始終需要通過數據庫查找來獲取屬於用戶名的UserId。

我想知道的另一件事是認證系統似乎很臃腫。我最好的猜測是,至多90%的用戶只使用一個認證系統來處理一個應用程序。那麼,爲什麼要創建默認功能以使其能夠爲多個應用程序提供服務? (aspnet_Users中的應用程序列)。

如果你不關心這些事情,這可能是好事,但我想爲1600多萬用戶做準備,不是嗎?或者,我想在50ms以下服務我的頁面......所以......爲什麼微軟會這樣構建默認的身份驗證系統呢?它似乎很臃腫,對我來說很糟糕。

一個相關的問題(不礦給出的答案):

How can I access UserId in ASP.NET Membership without using Membership.GetUser()?

+1

這是一個咆哮,而不是一個問題。你是專門討論ASP.NET MVC嗎?如果是這樣,你應該這樣標記問題。對於正確維護的數據庫,1600萬條記錄不是太多。如果你在50ms以內爲1600萬用戶提供服務,我猜你有一個好的基礎設施/支持團隊。 – Greg 2010-12-23 11:53:22

回答

0

OK,你不喜歡的ASP.NET成員資格提供。如果您是NHibernate的商店,那麼您可以看看Ayende Rahien的Rhino Security