Атрибут переопределения не работает?ASP.NET MVC 5.
-
20-12-2019 - |
Вопрос
У меня есть очень простой атрибут аутентификации, который я пытаюсь реализовать в приложении ASP.NET MVC 5, и у меня возникли проблемы. Я хочу, чтобы атрибут был применен во всем мире, за исключением конкретных действий в контроллере (например, форма входа в систему и домашняя страница).
Я попробовал украшать действие атрибутом [OverrideAuthentication]
без удачи. Это дает мне ошибку петли перенаправления, потому что приложение все еще выполняет аутентификацию в форме входа в систему, и продолжает пытаться перенаправить обратно в форму входа в систему и снова.
У кого-нибудь еще видели это поведение? Любая идея, что я здесь набил?
Например, я создал супер простой фильтр, который в настоящее время не используется:
public class BasicAuthenticationAttribute
: ActionFilterAttribute, IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext filterContext)
{
throw new NotImplementedException();
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
{
throw new NotImplementedException();
}
}
.
Если я украшу свой контроллер / действие, как это так:
[BasicAuthentication]
public class AccountController : Controller
{
[HttpGet]
[OverrideAuthentication]
public ActionResult Login()
{
return View();
}
}
.
Я получаю не реализованное исключение, когда я ориентируюсь на действие входа в систему, даже если это действие не должно управлять кодом аутентификации вообще. Я неправильно понял, как должны работать переопределения?
Решение
Я думаю, что вы запутали аутентификацию с авторизацией (как можно больше людей).Не имеет смысла делать [BasicAuthenticationattribute] и регистрируйте его по всему миру, потому что аутентификация происходит только при входе в систему, не на каждом запросе.
Авторизация - это то, что происходит после того, как пользователь вошел в систему, чтобы проверить, имеет ли у пользователя необходимые привилегии для выполнения конкретного действия, и имеет смысл сделать авторизацию во всем мире.Авторизация в MVC обрабатывается [aprizeattribute], и вы можете наследовать его, если вам нужно настроить способ проверки авторизации.Вы также можете зарегистрировать его как глобальный фильтр.
[ruseAnonymousattribute] работает в сочетании с [aprizeattribute], и в основном говорит о проверке авторизации.Следует также отметить, что [ruseAnonymousattribute] не будет никаких эффектов, если он не используется с [авторизеатомтрибутом].