我在II6上有一个asp.net 2.0(.net3.5)网站。 它设置为使用表单身份验证。 我已将“aspnet_isapi.dll”设置为IIS中“通配符应用程序映射”中的条目,因此所有请求都将通过asp.net。 在web.config中,我通过以下设置禁止所有匿名用户:
<system.web>
<authorization>
<deny users="?"/>
</authorization>
...
</system.web>
我想这样做,以便具有特定扩展名的文件(特别是图像文件,如.gif,.jpg)不需要进行身份验证。 这些文件位于不同的文件夹中,因此只允许使用图像文件夹。
我修改了自己的Forms Authentication HttpModule来忽略所有这样的请求并返回。但是因为它忽略了这些文件而没有创建Principal,所以请求仍然是匿名的,并且会出现身份验证错误。
理想情况下,如果我可以执行以下任何一项操作会很棒,但它看起来不像是可以做到的事情:
1)当我们在IIS中设置通配符映射时,允许我们排除某些文件扩展名。
2)在我自己的Forms Authentication HttpModule中,我可以告诉asp.net停止此文件的asp.net处理pipleline,或者只是停止对它进行身份验证。
3)允许我们在web.config中location标签的path属性中使用通配符,例如:
<location path="*.jpg>
<authorization>
<allow users="?"/>
</authorization`>
</system.web`>
我能想到的唯一解决方案是在IIS中删除通配符映射并单独添加应用程序扩展映射,因此并非所有请求都可以由asp.net处理。但是,我冒着丢失某些文件类型的风险,更不用说为所有已知文件类型(减去图像文件)单独添加它会很繁琐
有什么想法吗?
答案 0 :(得分:1)
创建通用的经过身份验证的主体
Public Class BlowByAuthenticatedIdentity
Implements IIdentity
Public ReadOnly Property AuthenticationType() As String Implements System.Security.Principal.IIdentity.AuthenticationType
Get
Return "BlowBy"
End Get
End Property
Public ReadOnly Property IsAuthenticated() As Boolean Implements System.Security.Principal.IIdentity.IsAuthenticated
Get
Return True
End Get
End Property
Public ReadOnly Property Name() As String Implements System.Security.Principal.IIdentity.Name
Get
Return String.Empty
End Get
End Property
End Class
Global.asax Application_AuthenticateRequest 中的
If Request.Path.ToLower.EndsWith(".jpg") Then
Me.Context.User = BlowByAuthenticatedIdentity
End if
答案 1 :(得分:0)
也许您可以尝试使用httpHandlers部分来命名要排除的扩展名
<system.web>
<httpHandlers>
<add verb="*" path="*.mdb" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.csv" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.private" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
</system.web>
然后创建自己的httpHandler来处理用户请求的文件。
您可以在此处阅读更多内容 - http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q307985#2a
这只是我对你问题的看法。
谢谢, 附庸风雅