Вопрос

У меня есть очень простой атрибут аутентификации, который я пытаюсь реализовать в приложении 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] не будет никаких эффектов, если он не используется с [авторизеатомтрибутом].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top