什麼是IPrincipal/IIdentity優勢,而不是擁有包含您需要的屬性的自定義User類並將其用於認證/授權?將用戶存儲在IPrincipal/IIdentity中有什麼好處?
回答
顯而易見的好處如下:應用程序的身份驗證&授權的整體概念是圍繞以下方式構建的:主體和身份,表示爲IPrincipal
/IIdentity
。正因爲如此,內置機制通常假定使用這兩種機制。如果他們被使用,建立在機制可以工作。
以Web應用程序爲例。 HttpContext
的終身用戶申請表示爲IPrincipal
。通過符合這個約定,您允許授權機制正確地評估用戶是否被允許訪問網絡資源。這是因爲WebForms UrlAuthorization
的模塊和MVC的Authorization
屬性都假定主體以此標準方式存儲。
在桌面應用程序中,您有Thread
的CurrentPrincipal
這也是IPrincipal
。
更換IPrincipal
/IIdentity
與您自己的認證/授權接口將永遠。您將不得不重寫基本類庫的大部分處理認證/授權的部分,而不是內置在您要依靠自定義實現的接口中。
但是,我不完全明白你提出的兩個陳述之間的任何反對意見。您詢問了IPrincipal
優於自定義課程的優勢。但是IPrincipal
只是一個接口(!!),您的自定義類可以輕鬆實現。與IIdentity
相同。然後,您可以將您的自定義課程放在任何地方IPrincipal
預計。
當然,這可能有點棘手,例如在Web應用程序中,您將不得不替換內置的驗證模塊來設置IPrincipal
。最常用的有兩種 - FormsAuthenticaiton
,它使用GenericPrincipal
/FormsIdentity
和SessionAuthenticationModule
,它使用ClaimsPrincipal
/ClaimsIdentity
。相比之下,您的自定義模塊可以使用您想要的任
「在桌面應用程序中,您有Thread的CurrentPrincipal」 - 也是在服務器應用程序中。 – Joe 2014-09-13 13:00:18
@Joe:true。我只想舉一些例子,而不是全部。 – 2014-09-13 14:14:16
Active Directory,Windows Identity Foundation和Windows本身的標準身份驗證方法都使用IPrincipal
和IIdentity
。基本上,如果你想使用任何內置的認證機制,你必須使用這些類。通常,您將擁有一個自定義數據庫模式來存儲用戶信息,並且您將從該數據創建IPrincipal
和IIdentity
對象以執行身份驗證。
- 1. 在數組中存儲類似變量有什麼好處嗎?
- 2. 使用Hazelcast代替MongoDB來存儲用戶會話/密鑰有什麼好處?
- 3. 在像SQL這樣的數據庫中存儲數據有什麼好處?
- 4. 在登錄時重新存儲密碼有沒有什麼好處?
- 5. 執行存儲過程時,使用CommandType.StoredProcedure與使用CommandType.Text有什麼好處?
- 6. 反射有什麼好處?
- 7. StringBuilders有什麼好處?
- 8. 粘液有什麼好處?
- 9. Cakephp,它有什麼好處?
- 10. ConcurrentSkipListMap有什麼好處?
- 11. AnkhSVN有什麼好處?
- 12. VS2010 SP1有什麼好處?
- 13. WTP有什麼好處
- 14. 「svn:externals」有什麼好處?
- 15. cURL有什麼好處?
- 16. AJAX有什麼好處?
- 17. 元組有什麼好處?
- 18. 協程有什麼好處?
- 19. 將用戶名和密碼存儲在cookie中有什麼問題?
- 20. 在StateListDrawable中將android:constantSize設置爲'true'有什麼好處?
- 21. 將用戶數據存儲在$ rootScope中 - 好還是壞?
- 22. 在Tomcat中使用APR有什麼好處(如果有的話)?
- 23. 使用Python類有什麼好處嗎?
- 24. 使用sessionStorage有什麼好處?
- 25. 使用ExecutorService有什麼好處?
- 26. 使用JDBC模板有什麼好處?
- 27. 使用oozie包有什麼好處?
- 28. 爲JCE使用fips有什麼好處?
- 29. node.js - 使用玉器有什麼好處
- 30. 使用toString有什麼好處()
它們是接口,你不在接口中「存儲用戶」。它們具有通常的接口優點,即與特定實現無關的合同。讓你的班級實施這些界面是否有用是有點令人懷疑的,但是不清楚這個問題。 – 2014-09-13 12:48:51