2011-08-30 52 views
2

最近一位同事建議使用內置的MS Membership,Role和Profile提供程序是一個不好的主意。他並沒有真正詳細解釋爲什麼,但是,他確實提到,如果您正在爲高容量網站工作,那麼架構很糟糕。想知道社區的意見是什麼?好奇的是,如果最好推出自己的產品或使用內置的MS提供商?這個領域的最佳做法是什麼?asp.net會員/角色/配置文件提供程序 - 好還是壞?

+2

您可以通過從MembershipProvider繼承或直接從f.e.構建一個自定義MemebrshipProvider(http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx)。 SqlMembershipProvider的。不確定你的同事是否會這樣做。但我不認爲完全重新發明輪子是一個好主意。 –

+1

我同意,提供者模型是一種在.NET中實現身份驗證的可靠方法,並且可以提高互操作性。它具有可以安全強化的弱點,但重新發明輪子通常會導致使用會話的不安全實現或類似的可怕事情。 – TheCodeKing

回答

2

這問題可能要被關閉,主觀和爭論,但這裏有好點的價錢一定的聯繫,從人比我聰明,你要考慮並決定自己:

  1. http://www.codinghorror.com/blog/2010/11/your-internet-drivers-license.html
  2. 從上面的文章,但聯繫到值得它自己的鏈接:http://www.codinghorror.com/blog/2008/05/openid-does-the-world-really-need-yet-another-username-and-password.html
  3. https://www.owasp.org/index.php/Guide_to_Authentication

我是互聯網駕駛執照概念的堅定信徒。

除非您確實沒有強大的安全要求,否則自己製作是個壞主意。作爲一般的經驗法則,我們的Web開發人員對安全性不好。 ASP.NET成員工具是由那些擅長安全的人撰寫的 - 這些人爲一家公司聲譽不佳(在我看來),並且有正確的證明。但是,如果您必須選擇使用內置提供者並自行開展工作,我會反對您的同事所說的話。

儘管他們代表不好,但微軟非常關心安全性,如wealth of information freely provided to developers on this subject alone所示。在我以我自己的能力提出一個安全系統之前,我會相信他們。至於性能方面,我還沒有對內置提供商進行任何否定期權,但我認爲我所使用的網站數量特別高(每天只有大約10,000次點擊)。

最後編輯 -

如果你做去內置的提供者,OWASP網站對推薦的設置信息:https://www.owasp.org/index.php/Reviewing_Code_for_Authentication

+0

我很困惑openid與OP提到的asp.net提供商有什麼關係。也不確定什麼認證與OP提及的提供商有關...不認爲他在談論滾動他自己的認證/授權。只是餅乾供應商是否可以。就個人而言,我討厭會員供應商的實施,並沒有看到創建自定義會員供應商的要點... –

+0

@B Z - 我明白不想使用提供商。然而,回答你的評論,如果你看他的問題中的最後一句話,它確實會說「好奇是否最好推出自己的產品或使用內置的MS提供商?」這就是我爲什麼不推出自己的細節的原因。 OpenId作爲一種替代方案被拋入其中,因爲他不止考慮兩個選項。另外,Jeff Atwood在那些關於地球上每個開發者的問題的文章中都提出了一個非常好的觀點,提出了他們自己的機制和標準。 – David

+0

謝謝你們......非常棒的輸入......正是我在尋找的東西。特別是大量的網站是主要領域,openId可以幫助。此外,我確實找到了OpenID的aps.net提供程序包裝 - 也許這是獲得兩全其美的好方法! – bbqchickenrobot

1

<意見與內置的>

我的經驗提供者是它的工作原理......有時候......我所做的一些項目的問題是它沒有提供我們想要的那麼多的定製,或者它提供的定製是我們自己推出的那麼多工作。當然,我在編程旁邊有一些n00b。

所以它真的歸結爲你想要的。 MS SQL提供程序是否可以正常工作並執行您想要的任何操作?大!使用它。其他方面,我會說自己做。

< /意見>

1

的主要問題在提供者模型夷爲平地的是,它從ASP.NET 2.0 Web表單時代,可測試性的使得組件易於使用的要低得多優先冰雹。提供者模型鼓勵使用靜態類和靜態方法使事情發揮作用,使其可能難以測試,並將其融入到平臺的身份驗證和授權機制中。 Membership.GetUser()及其使用IIdentity.NameRolePrincipal及其使用Roles.IsUserInRole(string role)是兩個最好的例子。更重要的是,由於框架實例化和控制實例的方式,需要花費一些時間來強制它們使用模式控制和依賴注入等模式。這可能導致人們推出自己的解決方案。

所有這一切說,供應商是一個嘗試和可靠的方法來堅實身份驗證和授權在ASP.NET應用程序。如果你知道自己在做什麼,你可以在沒有它們的情況下做,但如果你不這樣做,要麼花時間瞭解它們是如何工作的,以及如何在系統中更靈活地提供類似的功能,或者直到它們變爲一個問題。

+2

我永遠不會編寫依賴於成員資格的代碼,它不是真的依賴這些靜態方法,它們只是提供者實例的快捷方式。相反,我會使用DI來注入MembershipProvider,它可以被模擬,同樣的原理和IIdentity是高度可測試的。 – TheCodeKing

+0

Reliance不是合適的詞,但它們是最常用於獲取實例的道路,很像'HttpContext.Current'用於獲取流水線外的當前上下文(即使通過容器設施方法注入)。使用DI注入提供者需要提供者註冊才能委託給提供的容器。我的觀點是,像你這樣擁有多年經驗的人擁有建立一個鬆散耦合和高度凝聚力系統的技能和知識,並且努力解決直接依賴性,難以測試代碼和...... –

+0

你可能也有技能和知識來推出自己的會員和角色實施,但不是每個人都這樣做。因此,除非你真的知道你在做什麼,否則請使用提供者。 –

1

我已經使用Membership,Role和Profile模型來編寫適合我需求的自定義提供程序,而其他許多人也都這樣做了。您沒有鎖定到提供者模型。你需要做研究,確定它是否符合你的需求,並作出適當的決定。您現在可以提供諸如OpenId和較新的BrowserID之類的產品,這些產品可以輕鬆地與Microsoft的提供商模型集成以實現您的目標。沒有人拿着槍到你的頭上。獲取事實,做一些研究,並決定什麼是適合你的。如果您想查看別人所做的其他示例,請在codeplex.com上搜索哪些地方有多種不同的產品。

+1

這是事實......只要方法調用匹配,我就可以做任何我想要的內容。在下載RavenDB成員資格提供程序後出來。很好的例子!並感謝或提示! – bbqchickenrobot

相關問題