什么是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