0

Я прочитал статью о безопасности asp.net mvc. и он отметил, что более безопасный подход к созданию пользовательской авторизации заключается в создании подкласса AuthorizeAttribute, поскольку переопределить метод AuthorizeCore, гарантирует, что я получаю пользу от встроенных функций AuthorizeAttribute, и мне не нужно беспокоиться о детализации безопасности имплантировать или создавать все с нуля. следующим образом: -Можно ли создать собственный атрибут аутентификации путем создания подкласса AuthorizeAttribute

public class CustomAuthAttribute : AuthorizeAttribute { 
    private bool localAllowed; 
    public CustomAuthAttribute(bool allowedParam) { 
    localAllowed = allowedParam; 
} 
protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    if (httpContext.Request.IsLocal) { 
    return localAllowed; 
    } 
else { 
    return true; 

Пусть говорят, что я добавил атрибут CustomAuth вместо DEFUALT [Authorize] атрибут к моим методам действий. так может кто-нибудь совет на следующее: -

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

  2. является необходимым проверить, если запрос проходит проверку подлинности внутри атрибута пользовательского Авторизоваться следующим образом: -

    если (! HttpContext.Request.IsAuthenticated) вернуться ложным;

или это обрабатывается defualt?

  1. Могу ли я по-прежнему использовать Пользователь, Роль и передавать их с использованием настраиваемого атрибута авторизации.

Может ли кто-нибудь посоветовать это, пожалуйста? Thanks

ответ

1

Я использую производный AuthorizeAttribute, а также для обработки некоторых ситуаций, которые нет в базовом классе. Проблема в фрагменте кода заключается в том, что вы не вызываете базовую функциональность. Поэтому в AuthorizeCore вам нужно позвонить base.AuthorizeCore(httpContext); вместо проверки httpContext.Request.IsAuthenticated, если вы не хотите полностью изменить это поведение (ваш второй вопрос). Может быть, this example помогает.

Чтобы ответить на ваш первый вопрос: да, если вы не переопределяете эту функциональность из базового класса.

Вопрос 3: Насколько я знаю, ваш производный атрибут работает точно так же, как и база, если вы не переопределяете это. Но что именно вы подразумеваете под «передачей пользователя и роли»?

+0

ok Спасибо за ваш ответ. поэтому у меня есть три основные проблемы. Первый, так как я не называю base.authorizecore, какие функции я пропущу? Вторая проблема, так как я явно проверяю httpContext.Request.IsAuthenticated, так что мой код представляет собой дыру в безопасности? третья проблема, если я вызываю base.AuthotizeCore (httpContext), тогда мне не нужно явно вызывать httpContext.Request.IsAuthenticated? –

+0

1: посмотрите исходный код MVC: http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/AuthorizeAttribute.cs 2: я не знаю, кто устанавливает 'IsAuthenticated', поэтому не уверен, можно ли назвать это свойство безопасным. 3: это правильно. – Marthijn