В Asp.Net MVC 3, что представляет собой аутентифицированного пользователя для AuthorizeAttribute? - PullRequest
1 голос
/ 12 марта 2012

Я считаю, что многие вещи в Asp.Net основаны на предполагаемых знаниях.Я, например, не очень разбираюсь в интернет-аутентификации и с трудом нахожу что-либо об этом на начальном уровне.

Одна вещь, которая меня озадачивает, это AuthorizeAttribute.Я понимаю, как его использовать и что он должен делать, но мне интересно, будет ли он работать в ситуациях, когда у вас есть пользовательская система входа в систему.

В описании на странице AuthorizeAttribute написано просто When you mark an action method with AuthorizeAttribute, access to that action method is restricted to users who are both authenticated and authorized.

Итак, что такое аутентифицированный пользователь, как настроить одного пользователя для аутентификации.Если я создаю свою собственную систему входа в систему, как мне установить, чтобы вошедший в систему пользователь был достаточно аутентифицирован, чтобы AuthorizeAttribute разрешил ему вход?

Ответы [ 4 ]

5 голосов
/ 12 марта 2012

Проверяет IsAuthorized IIdentity из IPrincipal .

В Global.asax добавьте метод для обработки «AuthorizeRequest».затем в этом методе сделайте все, что вам нужно, чтобы проверить, авторизован ли пользователь (проверьте сеанс, cookie, дБ и т. д.)

Затем установите HttpContext.Current.User в GenericPrincipal пользователь, который реализует IIdentity и имеет для IsAuthorized значение true.

Примерно так:

  public class MvcApplication : HttpApplication
  {
    public MvcApplication()
    {
      this.AuthorizeRequest += this.AuthorizedRequestEvent;
    }

    private void AuthorizedRequestEvent(object sender, System.EventArgs e)
    {
      // do checking here with what ever you want
      bool isAuthenicated = false;

      // change this what what ever implements IIdentity
      var user = new User(); 
      user.IsAuthenticated = isAuthenicated ;
      GenericPrincipal principal;
      principal = new GenericPrincipal(user, new string[] { });
      HttpContext.Current.User = principal;
    }
   }
1 голос
/ 12 марта 2012

Если вам нужны знания начального уровня, вам нужно купить хорошую книгу.Быстрый поиск на Amazon.com показывает большую поддержку Pro ASP.NET MVC 3 Framework, так что это, вероятно, хорошее место для начала.Ценность книги, подобной этой, состоит в том, что она проведет вас через прямой пример создания веб-приложения (включая аутентификацию).

Что касается безопасности ... вы не хотите создавать свои собственные ... особенноесли вы новичокСлишком легко понять что-то не так и закончить с беспорядком (был там .. сделал это).Что вы хотите сделать, это использовать встроенную аутентификацию.Опять же, книга была бы отличным местом для начала, но в противном случае начните со встроенного шаблона и следуйте этой инструкции .После этого начните читать код и использовать имена классов в качестве точек поиска Google.

1 голос
/ 12 марта 2012

Вам не хватает базовых знаний о том, как работает конвейер ASP.NET.

http://msdn.microsoft.com/en-us/library/bb470252.aspx

В частности, где-то на ранних стадиях происходит событие AuthenticateRequest, когда подключенные модули могут устанавливать аутентификацию пользователя. Как они это делают? Устанавливая текущие значения HttpContext User в значение, отличное от null, где Identity.IsAuthenticated соответствует true.

Поскольку свойство User контекста не привязано ни к какому конкретному типу (скорее это может быть любое значение, тип которого наследуется от IPrincipal) возможен любой поставщик аутентификации.

И последнее - многие люди придерживаются модуля проверки подлинности форм, где информация извлекается из файла cookie.

1 голос
/ 12 марта 2012

HttpContext.Current.User содержит объект User, который является текущим вошедшим пользователем. Находясь внутри Controller, это также можно получить просто из User.

...