如何解决如何使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的方法也不行。我希望可以将users
和roles
映射到当前请求用户的用户名和组名。我不需要的是基于表单的授权或将目录转换为“应用程序”或任何需要在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 举报,一经查实,本站将立刻删除。