微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使IIS根据Windows用户名或组成员身份授权请求?

如何解决如何使IIS根据Windows用户名或组成员身份授权请求?

我有一个由IIS使用PHP托管的旧版Web应用程序。使用根目录的web.config中的以下配置来限制对该应用程序某些目录的访问。这样就可以将Windows用户名用作REMOTE_USER,以便该应用程序可以将该用户名映射到单个数据库中以检查授权。这行得通,绝对不能更改。

<location path="lsgprog/bibliothek/adm">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication    enabled="false" />
                <windowsAuthentication      enabled="true"  />
            </authentication>
        </security>
    </system.webServer>
</location>

使用Windows提供的凭据也限制了对其他目录的访问。因此,这些其他目录也已禁用anonymousAuthentication并已启用windowsAuthentication。区别在于1.这些设置是在IIS的GUI中进行的;而2.实际上是根据文件系统检查授权的。这意味着目录仅对某些特殊用户组具有读取访问权限,这些组和用户由某些Active Directory维护,并且由于该应用程序使用Windows身份验证,因此一切正常。用户在其Windows上进行身份验证,打开Internet Explorer,请求网站的受限制部分,IIS获取用户名,组成员身份等,检查对文件系统中受限制目录的访问并授予或拒绝。

所有这些都是使用IIS的GUI手动配置的,我想将其迁移到web.config。上面已经介绍了为某些目录启用Windows身份验证,我所缺少的是如何允许/拒绝对用户和组的访问,这是文件系统的一部分。我已经找到了元素authorization,它看起来很像我想要的元素,但是我尝试执行的所有操作都不起作用。

<location path="lsgprog/vfristen">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication    enabled="false" />
                <windowsAuthentication      enabled="true"  />
            </authentication>
        </security>
    </system.webServer>

    <system.web>
        <authorization>
            <deny   users="*"
                    roles="*"
                    verbs="GET,HEAD,POST" />
        </authorization>
    </system.web>
</location>

我的期望是,以上内容足以使所有用户拒绝访问,但这是行不通的,并且任何基于ALLOW的方法也不行。我希望可以将usersroles映射到当前请求用户用户名和组名。我不需要的是基于表单的授权或将目录转换为“应用程序”或任何需要在web.config之外进行的操作。

那么,我要尝试做的一切是否可能?如果可以,怎么办?谢谢!

解决方法

在这种情况下,有多种选择,首先-尝试将web.config文件添加到需要具有自己权限的文件夹中,例如在lsgprog/vfristen下,最小的web.config示例将拒绝所有用户访问:

<?xml version="1.0"?>
<configuration>
    <system.web>
      <authorization>
        <deny users="*" />
      </authorization>
    </system.web>
</configuration>

它为什么起作用-IIS会查看web.config文件的每个文件夹结构,在这种情况下,子级将覆盖父级,但只会覆盖子级内的节点-这意味着它将保留所有其他节点父(根)web.config中的设置Make application and directory-specific configuration settings in an ASP.NET application

尽管以上文档是针对ASP.NET的,但它也适用于IIS级别。

要尝试的第二个选项-由于提到的问题的根源为lsgprog,因此web.config中的设置如下:

<location path="lsgprog/vfristen">

应更改为(从路径中删除项目的根文件夹):

<location path="vfristen">

最后一个可行的第三个选择是在Machine.config级别上将其覆盖,如上述文档所述: Use the location element in the Machine.config file

当allowOverride属性为false时,Web应用程序目录中的Web.config文件无法覆盖您在元素中指定的设置。在必须限制应用程序开发人员配置Web应用程序的环境中,这是一个有用的设置。下面的示例显示了Machine.config文件的一部分,该文件要求身份验证才能访问默认网站上的MyApp应用程序,并且不能被Web.config文件中的设置覆盖:

Machine.config

<configuration>
    <location path="Default Web Site/MyApp" allowOverride="false">
        <system.web>
            <authorization>
                <allow users="?" />
            </authorization>
        </system.web>
    </location>
</configuration>

,

您可以尝试在网站的web.config文件中添加以下代码:

    <location path="foldername">
        <system.webServer>
            <security>
                <authentication>
                    <anonymousAuthentication enabled="false" />
                    <windowsAuthentication enabled="true" />
                </authentication>
            </security>
        </system.webServer>
    </location>
<location path="foldername/page1.php">
        <system.webServer>
            <security>
                <authorization>
                    <remove users="*" roles="" verbs="" />
                    <add accessType="Allow" roles="DOMAIN\ADGROUP" />
                    <add accessType="Deny" users="*" />
                </authorization>
            </security>
        </system.webServer>
    </location>

编辑:需要在iis中安装URL授权才能使此规则生效。

https://docs.microsoft.com/en-us/iis/manage/configuring-security/understanding-iis-url-authorization

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。