ASP .Net: проблема авторизации - PullRequest
       33

ASP .Net: проблема авторизации

3 голосов
/ 28 сентября 2010

У меня возникают некоторые проблемы при использовании функции маршрутизации URL-адресов ASP .Net 4, когда настроены правила авторизации.

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);
}

{Root} \ 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>

{Root} \ Restricted \ 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

Следующее изменение в файле конфигурации даетme Доступ запрещен.

{Root} \ 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 ]

1 голос
/ 05 октября 2010

Хммммм Я думаю, что это происходит примерно так:

<location path="">
    <system.web>
        <authorization>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

Проблема, которую я вижу здесь, исходит из этого пути = "", потому что эта информация говорит UserAgent [браузеру, как IE или FF или Chrome]чтобы заблокировать этот адрес: http://localhost:xxxxx

, который фактически указывает на ваш маршрут по умолчанию: ~ / Restricted / Default.aspx

Вы запрещаете доступ к этой странице по умолчанию для всех пользователей,Надеюсь, это даст вам подсказку, как это сделать.

0 голосов
/ 06 октября 2010

Как пишет Эндрю Барбер, ваши правила аутентификации не вступят в силу при использовании маршрутизации таким образом.

Подробнее о маршрутизации и аутентификации / авторизации вы можете прочитать здесь: http://blogs.msdn.com/b/mikeormond/archive/2008/06/21/asp-net-routing-and-authorization.aspx..

0 голосов
/ 06 октября 2010

Вы фактически не используете перезапись URL; вы используете маршрутизацию. Между этими двумя понятиями есть существенная разница, которая может стать причиной вашей проблемы: при маршрутизации запрашиваемый URL-адрес никогда не изменяется. Таким образом, система авторизации все еще работает, основываясь на URL-адресах, набранных в адресной строке ... она вообще ничего не знает о том, что делает механизм маршрутизации после.

Это прекрасно объясняет ваше первоначальное поведение; Запрос root / default (значение маршрута с пустой строкой) разрешен в соответствии с вашими первоначальными правилами аутентификации. Тот факт, что маршрутизация вызывает загрузку содержимого ~/Restricted/Default.aspx, не имеет значения, то есть игнорируется. Аналогичным образом, прямой запрос / Restricted / вызовет механизм аутентификации.

Маршрутизация и авторизация на основе файлов / местоположений на самом деле очень сложно использовать вместе, именно по этой причине.

С другой стороны, если вы используете перезапись (где изменяется фактический запрашиваемый URL), все будет работать так, как вы ожидаете.

...