【问题标题】:Intranet Web Application Security内网 Web 应用程序安全
【发布时间】:2009-03-03 17:37:44
【问题描述】:

使用 Active Directory / Windows 集成身份验证是给定的。从开发的角度来看,使用它的最佳方式是什么?

是通过配置吗?

<location path="SecurePage.aspx">
    <system.web>
        <authorization>
            <allow roles="MyDomain\My Secure Users" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>

是通过code吗?

User.IsInRole(@"MyDomain\My Secure Users");

将其存储在数据库中是个好主意吗?那么授予新用户/组可以通过自定义应用程序完成吗? (我问这个是因为这是现状。)这个想法有什么问题?

【问题讨论】:

    标签: asp.net security intranet


    【解决方案1】:

    没有理由不能同时使用两者。通过 web.config 进行操作非常简单有效。始终在角色级别操作。您可以将代码版本用于配置不够用的场景,以及当您想要显示/隐藏 UI 的特定部分时(也有控制版本)。

    更新 1:您已经支持角色,所以我假设数据库实际上是将角色映射到功能。 Asp.net 内置支持和它支持的扩展点是在角色级别的。如果您真的需要完全动态,那么您需要在代码级别进行检查(.config 对角色进行操作)。这是需要额外努力的问题,因此它更多地取决于系统的大小。在大多数情况下,坚持角色就足够了。

    【讨论】:

      【解决方案2】:

      我个人更喜欢声明式方法(即基于位置的 web.config 方法)。这使得在必要时更容易进行更改,而无需重新部署代码。

      在任何情况下,我都不建议像在示例中那样使用静态字符串调用 User.IsInRole();如果您的身份验证没有更改,请使用 web.config 声明性方法。

      采用您在上一段中建议的路线非常好,但我只建议您的身份验证信息可能经常更改的情况,即 CMS 应用程序或类似的应用程序。

      简而言之,我认为在这个主题上没有“最佳实践”;这真的取决于应用程序。

      【讨论】:

        【解决方案3】:

        如果变化不大,请使用 web.config。

        如果要进行大量更改,则使用代码方法,但使用数据库使其易于修改。

        更多的是对编码实践的一般回答,而不是与安全性相关的答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-29
          • 2013-08-12
          • 2011-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-26
          相关资源
          最近更新 更多