Asp.net Intranet Web应用程序安全

Asp.net Intranet Web应用程序安全,asp.net,security,intranet,Asp.net,Security,Intranet,使用Active Directory/Windows集成身份验证是一种既定的做法。从发展的角度来看,什么是最好的消费方式 是通过配置吗 <location path="SecurePage.aspx"> <system.web> <authorization> <allow roles="MyDomain\My Secure Users" /> <deny users="

使用Active Directory/Windows集成身份验证是一种既定的做法。从发展的角度来看,什么是最好的消费方式

是通过配置吗

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

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

如果它不会有太大变化,请使用web.config

如果它将要改变很多,那么使用代码方法,但要使用数据库,使其易于修改


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

没有理由不能同时使用这两种方法。通过web.config进行操作非常简单有效。但始终在角色级别操作。您可以在配置不足的情况下使用代码版本,也可以在希望显示/隐藏UI的特定部分时使用代码版本(还有此版本的控件)


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

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

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

按照您在上一段中建议的路线走是完全可以的,但我只建议在您的身份验证信息可能频繁更改的情况下使用,即CMS应用程序或类似的情况

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

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