С членством ASP.NET, как я могу показать 403? - PullRequest
2 голосов
/ 04 декабря 2009

По умолчанию поставщик членства ASP.NET перенаправляет на loginUrl, когда пользователь не авторизован для доступа к защищенной странице.

Есть ли способ отобразить пользовательскую страницу ошибки 403 без перенаправления пользователя?

Я бы не хотел отправлять пользователей на страницу входа и иметь строку запроса ReturnUrl в адресной строке.

Я использую MVC (и атрибут Authorize), если у кого-то есть какие-либо советы, относящиеся к MVC.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 декабря 2009

В итоге я просто создал собственный класс Authorize, который возвращает мое запрещенное представление. Работает отлично.

public class ForbiddenAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentNullException("filterContext");
            }

            if (AuthorizeCore(filterContext.HttpContext))
            {
                // ** IMPORTANT **
                // Since we're performing authorization at the action level, the authorization code runs
                // after the output caching module. In the worst case this could allow an authorized user
                // to cause the page to be cached, then an unauthorized user would later be served the
                // cached page. We work around this by telling proxies not to cache the sensitive page,
                // then we hook our custom authorization code into the caching mechanism so that we have
                // the final say on whether a page should be served from the cache.

                HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;
                cachePolicy.SetProxyMaxAge(new TimeSpan(0));
                cachePolicy.AddValidationCallback(CacheValidateHandler, null /* data */);
            }
            else
            {
                // auth failed, display 403 page
                filterContext.HttpContext.Response.StatusCode = 403;
                ViewResult forbiddenView = new ViewResult();
                forbiddenView.ViewName = "Forbidden";
                filterContext.Result = forbiddenView;
            }
        }

        private void CacheValidateHandler(HttpContext context, object data, ref HttpValidationStatus validationStatus)
        {
            validationStatus = OnCacheAuthorization(new HttpContextWrapper(context));
        }
    }
1 голос
/ 18 февраля 2010

Asp.net имеет ошибку, которую я считаю ошибкой в ​​обработке форматы неаутентифицированные против недоаутентифицированные запросы с 2.0.

После долгих лет, как и все остальные, я наконец сыт по горло и все исправил. Вы можете использовать его «из коробки», но если нет, то я уверен, что с незначительными модами он подойдет вам.

Обязательно сообщите об успехе или неудаче, если вы решите его использовать, и я обновлю статью.

http://www.codeproject.com/Articles/39062/Salient-Web-Security-AccessControlModule.aspx

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