使用MVC和ASP.NET身份认证网址
|
我想要保护我的应用程序中特定的文件夹和资源,这些文件夹和资源在我的mvc应用程序的路由之外.我希望这些资源仅对经过身份验证的用户可用(只要身份验证,该角色不是有疑问的). 最初似乎UrlAuthorizationModule将是答案.我遵循这篇文章,Understanding IIS 7.0 URL Authorization,我可以让模块工作在一个意义上,它响应web.config中的配置元素. 我当前的问题是,我认为它是基于IIS中的匿名用户颁发的规则,而不是asp.net identity中的经过身份验证的用户. 测试环境 我使用标准的html文件进行测试,而不是尝试加载一个脚本,因为这也将被加载到MVC管道之外. >在Visual Studio 2015. >新建默认的.net 4.6.2 web项目 > IIS 8(用于在Visual Studio之外测试) >认证 – >匿名身份验证(已启用) 添加到web.config <configuration>
...
<location path="Data">
<system.webServer>
<security>
<authorization>
<clear/>
<add accessType="Deny" users="*"/>
<add accessType="Allow" users="?"/>
</authorization>
</security>
</system.webServer>
</location>
...
</configuration>
添加到文件夹结构 /Data/Protected.html // this file just has some basic Hello World content to display so you can see if it is loaded or not. 观察结果 >使用此配置,数据路径中的所有内容始终被拒绝,用户是否经过身份验证并不重要. 怎么办? 我失踪了什么如何使Url Authorization模块与MVC / WebAPI和ASP.NET Identity个人用户帐户配合工作,或者这是不可行的? 我也可以选择其他想法,也许答案是写一个自定义的HttpModule或HttpHandler? 旁注 为什么&细节 这些资源是javascript文件,简而言之,只有一部分脚本应该可用于未经身份验证的用户.根目录中有2个目录,一个用于应用程序的已认证部分,另一个用于应用程序的未认证部分.其原因与应用程序中的用户授权或安全性无关,是将应用程序的暴露表面区域限制为未认证的请求. 解决方法[TL; DR;]转到“完整根web.config”部分,查看所需的web.config设置. 在无痕模式下测试,以防止浏览器缓存问题! 首先拒绝访问根web.config中的所有匿名用户. <authorization>
<deny users="?"/>
</authorization>
这里的web.config允许一个文件夹被公开访问.这个文件夹,在我的示例中,被称为css,它位于MVC应用程序的根目录下.对于css文件夹,我将以下授权添加到根web.config中: <location path="css">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
如果您想要更多的公用文件夹,您可以添加更多的这些位置路径. 尽管所有其他文件在用户登录之前将无法访问,但是始终可以访问css文件夹及其内容. 我还将一个静态文件处理程序添加到根web.config中,这是至关重要的,因为您希望由asp.net管道为特定文件类型管理请求: <handlers>
<add name="HtmlScriptHandler" path="*.html" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" />
</handlers>
完成根web.config <system.web>
<authentication mode="None" />
<authorization>
<deny users="?"/>
</authorization>
<compilation debug="true" targetFramework="4.6.2" />
<httpRuntime targetFramework="4.6.2" />
</system.web>
<location path="css">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
</modules>
<handlers>
<add name="HtmlScriptHandler" path="*.html" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" />
</handlers>
</system.webServer>
默认情况下,ASP.NET将仅将allow和deny规则应用于托管处理程序处理的文件.静态文件不由托管处理程序管理. 你也可以设置:(不要这样做,如果不是真的需要!) <modules runAllManagedModulesForAllRequests="true"> 使用runAllManagedModulesForAllRequests =“true”,所有HTTP模块将在每个请求上运行,而不仅仅是托管请求(例如.aspx,ashx).这意味着模块将在每个.jpg,.gif,.css,.html,.pdf,…请求上运行. 一件重要的事情 如果现在删除然后重新添加UrlAuthorizationModule到模块部分,它将运行在前提条件“integratedMode”,而不是在“managedHandler”下面!因此,可以访问静态文件. <remove name="UrlAuthorization" /> <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" /> 如果设置前提条件进行管理:
P.S .:一些web.config属性是区分大小写的! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 发布表单时控件中的模型绑定 – 不会自动
- asp.net中ScriptManager和ScriptManagerProxy之间的区别
- ASP.NET成员资格框架有多安全?
- 如何使用ASP.NET创建和填充ZIP文件?
- asp.net-mvc-4 – ASP.NET MVC4模型绑定
- asp.net-mvc – Asp .Net Core – 无法安装Microsoft.AspNe
- asp.net-mvc – 在RedirectToRoute和RedirectToAction的ASP
- ASP.NET MVC 2.0 – RenderPartial和RenderAction之间的区别
- ASP.NET设计网络硬盘之删除文件夹实现代码
- 经典Asp中的多行字符串
- 最好的TinyMce编辑器图像管理器/文件上传为Asp.n
- 认证 – WebApi ActionFilterAttribute,HttpActi
- asp.net-mvc-3 – ASP.NET MVC3 – 分开的程序集
- asp.net-mvc – 如何确定视图是否为ASP.NET MVC中
- 将用户添加到角色ASP.NET身份
- asp.net – 有没有比升级到Visual Studio 2010 U
- if-statement – 如何在VBScript for Classic-AS
- ASP.NET Health Monitoring和ELMAH是否相互替代?
- asp.net-mvc – FormsAuthentication.SetAuthCoo
- 实体框架 – MVC3应用程序/服务层/存储库层/ POC
