我的ASP.NET解决方案中有一个文件夹层次结构,如下所示:
Reseller
文件夹中的所有内容都应进行身份验证,并被视为安全资源。但Services
文件夹中的任何内容都是公开的,并且无需验证为Web服务ProductServices.asmx
发出的任何请求。
现在,我想挂钩请求流程管道的AuthenticateRequest
,在用户通过身份验证之前,我想查看请求是针对公共路径还是安全路径。我知道我可以使用UrlAuthorizationModule.CheckUrlAccessForPrincipal
,而我实际上已经在another question中提出了这个问题。但UrlAuthorizationModule.CheckUrlAccessForPrincipal
是一种可以在请求通过身份验证后使用的方法。但是,在进行任何身份验证之前,我想知道请求的路径是否安全。换句话说,是否在任何web.config文件中的文件夹层次结构中的任何位置为所请求的路径定义了任何authentication
元素。
我想要的伪代码可能是这样的:
UrlAuthorizationModule.IsRequestedPathSecure(Request.Url.AbsolutePath)
我该怎么做?
答案 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 =“”是必要的。