如何检查请求的路径(URL)在ASP.NET中有身份验证规则?

时间:2011-10-09 08:24:56

标签: asp.net security httprequest httpmodule

我的ASP.NET解决方案中有一个文件夹层次结构,如下所示:

enter image description here

Reseller文件夹中的所有内容都应进行身份验证,并被视为安全资源。但Services文件夹中的任何内容都是公开的,并且无需验证为Web服务ProductServices.asmx发出的任何请求。

现在,我想挂钩请求流程管道的AuthenticateRequest,在用户通过身份验证之前,我想查看请求是针对公共路径还是安全路径。我知道我可以使用UrlAuthorizationModule.CheckUrlAccessForPrincipal,而我实际上已经在another question中提出了这个问题。但UrlAuthorizationModule.CheckUrlAccessForPrincipal是一种可以在请求通过身份验证后使用的方法。但是,在进行任何身份验证之前,我想知道请求的路径是否安全。换句话说,是否在任何web.config文件中的文件夹层次结构中的任何位置为所请求的路径定义了任何authentication元素。

我想要的伪代码可能是这样的:

UrlAuthorizationModule.IsRequestedPathSecure(Request.Url.AbsolutePath)

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您可以使用CheckUrlAccessForPrincipal方法(如您所述),但使用代表匿名用户的GenericPrincipal,如下所示:

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    IIdentity identity = new GenericIdentity(string.Empty, string.Empty);
    IPrincipal principal = new GenericPrincipal(identity, new string[] { });

    bool hasAccess = UrlAuthorizationModule.CheckUrlAccessForPrincipal(Request.Path, principal, "GET");

    if(!hasAccess)
    {
        //Anonymous access not permitted to the current URL.
    }
}

答案 1 :(得分:0)

不确定这是否有帮助,但您可以使用web.config的 location 元素禁止/授予对隐藏资源的访问权限,请参阅HOW TO: Control Authorization Permissions in an ASP.NET Application以获取说明。它使您可以在文件夹或aspx / asmx的基础上授予访问权限。 IIS将为禁止的位置返回403 HTTP错误代码,如果用户没有权限,则不会处理请求

答案 2 :(得分:0)

web.config 文件添加到转销商并将以下代码写入其中

<?xml version="1.0"?>
    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
      <system.web>
        <authorization>
          <allow roles="ResellerUser,ResellerAdmin" />
          <deny users="*"/>
        </authorization>
  </system.web>
</configuration>

并将web.config文件添加到服务文件夹并将以下代码写入其中

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <appSettings>
  </appSettings>
      <system.web>
        <pages theme="">
        </pages>
 <authorization>
  <allow roles="ResellerUser, ResellerAdmin" />
  <deny users="*" />
</authorization>

    

注意 Page theme =“”是必要的。