对于 ASP.NET 站点来说,实现不基于 Windows AD 并将帐户信息存储在数据库中的安全身份验证和授权的最佳实践是什么?是使用内置的表单例份验证、库存或自定义滚动的 MembershipProvider、企业库安全 block 吗?
它们之间是否有优缺点,例如替换表单例份验证会使保护包含非 ASP.NET 文件需要限制的文件的目录变得更加困难或不可能?
最佳答案
哎呀,这是一个很大的话题,所以我将列出一些一般性的要点。
表单例份验证为您提供了一个与 session cookie 分开的身份验证 cookie,该 cookie 可以防止篡改并且可以加密。它的提供程序模型意味着即使您推出自己的成员(member)提供程序,这种保护仍然存在,并且这些提供程序可用于保护 WCF Web 服务,并允许使用 silverlight 进行身份验证和授权
Forms auth 还在执行线程上创建一个 IIdentity/IPrincipal 对象,这意味着您可以使用 CAS PrimaryPermission 要求来保护可以与 ASP.NET 应用程序分离的方法、类甚至程序集,从而使授权成为交叉关注点应该是。
表单例份验证也被 IIS7 的文件保护机制使用,因此可以与 IIS7 一起使用来保护任何类型的文件,而不仅仅是那些与 ASP.NET ISAPI DLL 关联的文件(您可以在 IIS6 中执行狂野的操作)卡片映射并将所有内容都通过 ASP.NET 管道,但这会影响可扩展性)
表单例份验证不允许假冒。
自行推出可以消除所有这些。您可以开始使用 HTTP 模块重新构建它,该模块将执行您自己的 cookie 加载和验证、在线程上创建主体并检查对资源的访问。您仍然需要编写数据库位、控件(如果需要)、您自己的类并插入它们。
你需要把它做好。
标准方法有很多优点,而且它已经被很多人锤炼、测试、使用和滥用,自行推出的最大缺点是你可能没有你那么聪明我认为你是 - 我知道我不会这样做。
关于c# - ASP.NET 安全身份验证和授权的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410652/