我在配置授权规则时使用ASP .Net 4的URL路由功能时遇到了一些麻烦。
Global.asax中
void Application_Start(object sender, EventArgs e) {
RegisterRoutes(RouteTable.Routes);
}
private void RegisterRoutes(RouteCollection routes) {
routes.MapPageRoute("dashboard", "", "~/Restricted/Default.aspx", true);
routes.MapPageRoute("register", "register", "~/Register.aspx", true);
routes.MapPageRoute("login", "login", "~/Login.aspx", true);
}
{根} \ Web.Config中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="DevAuth"
loginUrl="/login/"
protection="All"
path="/"
timeout="15"
requireSSL="false"
slidingExpiration="true"
cookieless="AutoDetect" />
</authentication>
</system.web>
<system.webServer>
<security>
<authentication>
<basicAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</configuration>
{根} \受限制\的Web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="Developer" />
<add accessType="Deny" users="*" />
</authorization>
</security>
</system.webServer>
</configuration>
我面临的问题是:
当我尝试访问http://localhost/时 - 由于我在Global.asax中的 信息中心 规则,而不是被重定向到{{3我实际上正在获取 http://localhost/login/?ReturnUrl=%2f页面的 内容。
当我尝试访问http://localhost/Restricted/Default.aspx时 - 我确实被重定向到http://localhost/Restricted/ - 这是一个好兆头!
关于发生了什么的任何想法?
编辑1
配置文件中的以下更改为我提供了 访问被拒绝。
{根} \ Web.Config中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="DevAuth"
loginUrl="/login/"
protection="All"
path="/"
timeout="15"
requireSSL="false"
slidingExpiration="true"
cookieless="AutoDetect" />
</authentication>
</system.web>
<system.webServer>
<security>
<authentication>
<basicAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
<location path="login">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="register">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
答案 0 :(得分:1)
Hummmm我认为它是围绕着这个:
<location path="">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
我在这里看到的问题来自于这条路径=“”,因为此信息告诉UserAgent [浏览器,如IE或FF或Chrome]阻止此地址:http://localhost:xxxxx
实际上指出了你的默认路线:〜/ Restricted / Default.aspx
默认情况下,您拒绝所有用户访问此页面。希望它能为你提供如何做到这一点的暗示。
答案 1 :(得分:0)
您实际上没有使用网址重写;你正在使用路由。两者之间存在显着差异,可能会导致您遇到麻烦:使用“路由”时,您请求的URL永远不会更改。因此,授权系统仍在根据地址栏中输入的URL进行工作......它对路由引擎正在做什么一无所知。
这完全解释了你的初始行为;根据您的初始身份验证规则,允许请求root / default(空字符串路由值)。路由导致~/Restricted/Default.aspx
成为加载的内容这一事实并不重要 - 也就是说,它被忽略了。同样,直接请求/ Restricted /然后会触发auth机制。
基于这个原因,路由和基于文件/位置的授权实际上非常难以一起使用。
另一方面,如果您使用重写(请求的实际URL已更改),事情将按预期工作。
答案 2 :(得分:0)
正如Andrew Barber所写,当您以这种方式使用路由时,您的身份验证规则将无法发挥作用。
您可以在此处详细了解路由和身份验证/授权:http://blogs.msdn.com/b/mikeormond/archive/2008/06/21/asp-net-routing-and-authorization.aspx ..