Подтвердить что ты не робот

Как работает тег авторизации? - ASP.NET MVC

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

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

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

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

Это заставило меня написать специальные методы для множества элементов .NET-членства, поскольку все они использовали "userName" для выполнения поиска вместо использования UserId.

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

4b9b3361

Ответ 1

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

Ответ 2

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

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