用于特定URL的IIS HTTP Basic身份验证

时间:2017-05-27 11:03:08

标签: iis basic-authentication

我想使用HTTP Basic Auth限制特定路径的访问权限,以便访问/ www / private的人将通过身份验证而不是/ www / public,/ www / public / dashboard,.... / p>

注意:“私人”,“公开”,“仪表板”等不是文件夹,但是网址重写

我当前的webconfig:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="Imported Rule 1" stopProcessing="true">
                <match url="\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$" ignoreCase="false" negate="true" />
                <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="index.php" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
<location path="mysite/www/private">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="false" />
                <basicAuthentication enabled="true" />
                <windowsAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>
<location path="mysite/www">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="true" />
                <basicAuthentication enabled="false" />
                <windowsAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>

我还在IIS管理器中启用了基本身份验证和匿名授权 enter image description here

然而,这不起作用 - 它从不提示授权

1 个答案:

答案 0 :(得分:0)

IIS URLRewrite模块在身份验证启动之前重写请求,因此使用当前的重写规则,这是不可能的。

来自here

的例外情况
  

URL Rewrite模块是一个插入的本机代码模块   请求处理管道在预开始请求或开始请求   阶段,然后使用一组来评估请求的URL路径   重写规则。每个重写规则分析URL路径,如果全部,则分析   满足规则条件,将原始路径更改为新路径。   在评估完所有规则之后,URL Rewrite模块   生成最终的URL路径,通过该路径用于请求   IIS管道处理的其余部分。这意味着处理程序   IIS管道中的选择是基于重写的URL   由URL Rewrite模块生成。

您的重写规则是这样一种方式,它将任何不是静态文件的路径重写为index.php。其余的IIS管道将路径视为index.php。你必须在index.php.Or中实现你的身份验证,你可以轻松编写一个简单的IIS模块,这个SO question讨论它。您必须添加更多逻辑来检查URL(如果包含www / private)并发送401等。