Как работает тег Authorize? - ASP.NET В MVC

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

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

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

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

Это заставило меня написать пользовательские методы для многих вещей членства .NET, так как все они использовали "имя пользователя" для поиска вместо использования идентификатора пользователя.

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

2 ответов


на 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] тег, который будет использовать пользовательские проверки.


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

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