ASP .Net:授权问题

时间:2010-09-28 13:13:04

标签: c# asp.net url-rewriting forms-authentication asp.net-4.0

我在配置授权规则时使用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>

我面临的问题是:

关于发生了什么的任何想法?

编辑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>

3 个答案:

答案 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 ..