Проверка подлинности по формам + перезапись URL-адресов дает доступ к защищенным страницам - PullRequest
2 голосов
/ 03 декабря 2009

У меня проблема с перезаписью URL-адресов и аутентификацией по формам в ASP.NET ... На основании статей, которые я нашел в сети, я создал следующее HttpModule:

public class UrlRewriter : IHttpModule
{
    private UrlRewriteConfigurationSection config;

    public UrlRewriter()
    {
        config = ConfigurationManager.GetSection("urlrewrites") as UrlRewriteConfigurationSection;
    }

    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        httpApplication.AuthorizeRequest += new EventHandler(OnAuthorizeRequest);
    }

    private void OnAuthorizeRequest(object sender, EventArgs e)
    {
        string requestedPath = HttpContext.Current.Request.Path;

        foreach (UrlRewriteRule rule in config.UrlRewriteRules)
        {
            RegexOptions options = config.IgnoreCase ? RegexOptions.IgnoreCase : RegexOptions.None;

            Regex regex = new Regex(rule.UrlPattern, options);
            Match match = regex.Match(requestedPath);

            if (match.Success)
            {
                string newPath = regex.Replace(requestedPath, rule.RewritePattern);
                if (!String.IsNullOrEmpty(newPath))
                {
                    HttpContext.Current.RewritePath(newPath);
                    return;
                }
            }
        }
    }
}

Проблема, однако, в том, что это как-то отключает авторизацию! Для объяснения предположим, у меня есть следующее правило переписывания:

UrlPattern: ^user/profile$ Переписать шаблон: protected/profile.aspx

И предположим, что папка protected настроена так, чтобы запретить доступ анонимным пользователям ..

Теперь, когда код в OnAuthorizeRequest выполняется, он корректно переписывает путь к protected/profile.aspx, однако проблема в том, что мне показывают страницу, хотя я не вошел в систему! Если я запрашиваю страницу напрямую (http://localhost/site/protected/profile.aspx), она не разрешает доступ к сайту ..

Все статьи, которые я нахожу в сети, говорят, что мне нужно переписать в AuthorizeRequest вместо AuthenticateRequest или BeginRequest ..

Есть идеи?

NB. Я попытался переместить свой код переписывания в AuthenticateRequest, который, кажется, работает, но перенаправление на страницу входа не правильно (например, оно перенаправляет на /login?returnUrl=protected/profile.aspx вместо входа в систему? ReturnUrl = пользователь / профиль) * +1028 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...