【问题标题】:Best Practice for ASP.NET Security Authentication and AuthorizationASP.NET 安全认证和授权的最佳实践
【发布时间】:2009-09-11 12:46:37
【问题描述】:

对于 ASP.NET 站点来说,什么是公认的最佳实践,以实现不基于 Windows AD 并将帐户信息存储在数据库中的安全身份验证和授权?是使用内置的 Forms Authentication、库存或自定义滚动的 MembershipProvider、Enterprise Library 安全块吗?

它们之间是否有优缺点,例如替换 Forms Authentication 会使使用需要限制但不是 ASP.NET 文件的文件来保护目录变得更加困难或不可能?

【问题讨论】:

  • 1K 浏览量,0 人支持 awwwrrriggghttt

标签: c# asp.net security


【解决方案1】:

哎呀,这是一个很大的话题,所以我将列出一些一般性的观点。

表单身份验证为您提供了一个与会话 cookie 分开的身份验证 cookie,该 cookie 可以防止篡改并且可以加密。它的提供者模型意味着即使您推出自己的成员资格提供者,这种保护仍然存在,并且这些提供者可用于保护 WCF Web 服务,并允许使用 silverlight 进行身份验证和授权

Forms auth 还在执行线程上创建一个 IIdentity/IPrincipal 对象,这意味着您可以使用 CAS PrincipalPermission 要求来保护可以与您的 ASP.NET 应用程序分离的方法、类甚至程序集,从而使授权成为它的横切关注点应该是。

Forms auth 也被 IIS7 的文件保护机制使用,因此可以与 IIS7 一起使用来保护任何类型的文件,而不仅仅是那些与 ASP.NET ISAPI DLL 相关联的文件(你可以在 IIS6 中做一个狂野的卡映射并将所有内容都通过 ASP.NET 管道,但这会影响可伸缩性)

表单身份验证不允许模拟。

滚动您自己会删除所有这些。您可以开始使用 HTTP 模块重新构建它,该模块将执行您自己的 cookie 加载和验证,在线程上创建主体并检查对资源的访问。您仍然需要编写数据库位、控件(如果需要)、您自己的类并将它们插入。

你需要把它做好。

标准方法有很多优点,而且它已经被很多人锤炼、测试、使用和滥用,你自己的最大缺点是你可能没有你那么聪明认为你是 - 我知道我不会这样做。

【讨论】:

  • 这个问题的浏览量刚刚达到 1K,所以多年来第一次让我重新关注它。我最终只是建立在 Forms Auth 之上,将婴儿和洗澡水一起扔出去确实太正确了。但我不得不说,Forms Auth 是不可扩展的。我的 auth 模块必须做太多的黑客攻击才能从它被设计为具有基本零扩展点的设计中拦截 Forms Auth 决策。
【解决方案2】:

使用表单身份验证(使用股票 MembershipProvider 或自定义 MembershipProvider)通常被认为是标准。

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 2011-04-25
    • 2019-01-22
    • 2011-08-06
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 2017-02-04
    相关资源
    最近更新 更多