Мой ответ касается ядра ASP.NET. Я не уверен, что вы спрашивали о классическом ASP.NET, но это должно быть похоже.
Есть промежуточное ПО, которое вы должны добавить, чтобы [Authorize]
заработало. ASP.NET Core предоставляет это промежуточное ПО из коробки, и вы также можете добавить свои собственные обработчики аутентификации.
Вы можете проверить, как это реализовано, прочитав: https://github.com/aspnet/Security/tree/dev/src
Например, если вы хотите использовать аутентификацию канала-носителя JWT, вам нужно добавить промежуточное программное обеспечение канала-носителя JWT, это просто расширение AuthenticationBuilder : https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerExtensions.cs, которое вызывает AddScheme
под капотом.
Вы хотите использовать аутентификацию на основе файлов cookie, просто позвонив по номеру AddCookie
, который также является расширением, которое вызывает AddScheme
под капотом: https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication.Cookies/CookieExtensions.cs
Использование здесь задокументировано: https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x?view=aspnetcore-2.1
См. Также Использование атрибута [Authorize]
Веб-API предоставляет встроенный фильтр авторизации AuthorizeAttribute. Этот фильтр проверяет, прошел ли пользователь аутентификацию. Если нет, то возвращается код состояния HTTP 401 (неавторизованный) без вызова действия.
Если вам интересно, как этот фильтр работает под капотом, вы можете проверить его здесь .
Прежде чем авторизоваться, вы должны пройти аутентификацию, за это отвечает логика: https://github.com/aspnet/Security/blob/644f34e90d35b369efdce9c11ab1db42e0a7f4a7/src/Microsoft.AspNetCore.Authorization.Policy/PolicyEvaluator.cs#L91
В итоге
как атрибут [Authorize] знает, что этот пользователь аутентифицирован.
Один атрибут Authorize не знает, аутентифицирован ли этот пользователь. Это обрабатывается промежуточным программным обеспечением для аутентификации и строго зависит от схемы, с которой оно пытается аутентифицироваться. Он просто пытается аутентифицироваться с помощью схем, которые вы добавили (cookie, jwt и т. и устанавливает HttpContext.User
из результата ClaimsPrincipal
, который просто является результатом обработчика схемы, например, jwt handler . Я думаю, что это должно дать вам более глубокое представление о том, как это работает.
Как правило, если вы начинаете новый проект, я не рекомендую использовать классический ASP.NET и готовиться к будущему с .NET Core, так как сейчас все идет в этом направлении. ASP.NET 5 (я также называю его «классическим») в настоящее время практически мертв.