Как работает тег Authorize? - ASP.NET MVC - PullRequest
30 голосов
/ 29 августа 2009

Как тег авторизации определяет, авторизован пользователь или нет?

Например, если пользователь входит в систему и пытается перейти к представлению, имеющему тег авторизации. Как он определяет, авторизован ли пользователь или нет? Делает ли он запрос к базе данных и проверяет?

Как насчет того, чтобы перейти к представлению с авторизацией роли? Запрашивает ли она таблицу ролей членства?

Мне просто интересно, так как у меня есть то, что таблицы членства ASP.NET считают дубликатами userNames. Я использую серьезные поля, чтобы определить, какой пользователь является тем, что позволяет пользователям иметь одинаковые дубликаты userName, но при этом быть уникальными в моей базе данных.

Это привело к тому, что мне пришлось написать собственные методы для большого количества членов .NET, поскольку все они использовали «userName» для поиска вместо использования UserId.

Так что теперь мне интересно, может ли это быть в случае с тегом Authorize. Поскольку я понятия не имею, как это работает, и, например, если бы я не использовал членство в .NET, я бы не знал, как это будет определять.

Ответы [ 2 ]

26 голосов
/ 29 августа 2009

Тег Authorize использует все встроенные проверки членства из ASP.NET. ОЧЕНЬ легко установить собственный тег. Например:

public class MyAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext == null) throw new ArgumentNullException("httpContext");

        // Make sure the user is authenticated.
        if (httpContext.User.Identity.IsAuthenticated == false) return false;

        // Do you own custom stuff here
        bool allow = CheckIfAllowedToAccessStuff();

        return allow;
    }
}

Затем вы можете использовать тег [MyAuthorize], который будет использовать ваши пользовательские проверки.

16 голосов
/ 29 августа 2009

ControllerActionInvoker анализирует атрибут и вызывает OnAuthorization() для него, когда пришло время проверить учетные данные.

Метод AuthorizationAttribute.OnAuthorization() в основном проверяет, является ли User.Identity.IsAuthenticated истинным или нет. Это просто использует функциональность FormsAuthentication или любую другую схему аутентификации, которую вы можете использовать.

...