Вопрос об атрибуте [Authorize] для администраторов - PullRequest
4 голосов
/ 21 апреля 2011

Если у меня есть Площадь в моем веб-приложении ASP.NET MVC 3 (Razor), где все контроллеры происходят от базового контроллера, который выглядит следующим образом:

[Authorize(Roles="Administrator")]
public class AdminController : Controller
{

}

Когда не администратор пытается получить доступ к URL-адресу в этой области, он перенаправляется на страницу входа, указанную в файле web.config.

Но на самом деле это не имеет смысла, если пользователь уже аутентифицирован, но не является администратором. В этом случае мы не должны вернуть HTTP 401?

Мой вопрос в основном, как люди справляются с этим - они создают собственные атрибуты авторизации?

Ответы [ 4 ]

2 голосов
/ 21 апреля 2011

Смотрите эту тему ... ASP.Net преобразует 401 в 302 кода ошибки

Что вы действительно хотите сделать, это вернуть код 403. 401 предназначен для проверки подлинности. ASP.NET формирует авторизацию, перехватывает 401 и толкает пользователей на страницу входа.

Если вы все еще хотите сделать 401, не могли бы вы описать ожидаемый опыт для конечного пользователя?

1 голос
/ 22 мая 2012

Я работаю с ASP.NET MVC4 Beta, и сегодня я заметил, что если я добавлю ReturnUrl параметр в строку запроса, модуль форм не изменит ответ.

Так что если действие i / Rate имеет атрибут[Authorize] затем

<a href="/xm/i/Rate?pid=3&amp;count=2&amp;ReturnUrl=%2F">..</a>

возвращает 401. Я не знаю, является ли это ошибкой или функцией, но теперь она работает, как описано.

0 голосов
/ 21 апреля 2011

Если неавторизованный пользователь пытается получить доступ к методу, помеченному атрибутом Authorize, платформа MVC возвращает код состояния HTTP 401. Если сайт настроен на использование проверки подлинности с помощью форм ASP.NET, код состояния 401 заставляет браузер перенаправить пользователя на страницу входа.

Refrence: http://msdn.microsoft.com/zh-tw/library/system.web.mvc.authorizeattribute.aspx

Другой похожий вопрос: Как перехватить 401 из проверки подлинности с помощью форм в ASP.NET MVC?

0 голосов
/ 21 апреля 2011

у нас есть собственный атрибут фильтра авторизации для таких сценариев, и мы переносим пользователя на пользовательскую страницу ошибки

public void OnAuthorization(AuthorizationContext filterContext) {


if(//user does not have permission){

filterContext.Result = new RedirectResult("/Error/AccessDenied");

}
...