Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Ключевым инструментом для авторизации является атрибут AuthorizeAttribute из пространства имен Microsoft.AspNetCore.Authorization
.
Например, в прошлой теме данный атрибут ограничивал доступ к методу Index контроллера HomeController:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; public class HomeController : Controller { [Authorize] public IActionResult Index() { return Content(User.Identity.Name); } // остальные методы }
В этом случае доступ к методу Index имеют только те пользователи, которые залогинились в приложении. Анонимные пользователи же в данном случае при доступе к методу Index будут переадресованы на форму входа в приложение.
При этом атрибут Authorize
не указывает, как пользователь должен аутентифицироваться, он только выполняет проверку.
Для проверки статуса пользователя атрибут использует свойство User
объекта HttpContext, которое устанавливается инфраструктурой ASP.NET.
Свойство HttpContext.User
представляет объект интерфейса IPrincipal, который определен в пространстве имен
System.Security.Principal
. Этот интерфейс определяет метод IsInRole()
и свойство Identity
.
Свойство Identity возвращает объект интерфейса IIdentity, который связан с текущим запросом.
Метод IsInRole() в качестве параметра принимает роль и возвращает true
, если текущий пользователь принадлежит данной роли.
Объект IIdentity
, в свою очередь, предоставляет информацию о текущем пользователе через следующие свойства:
AuthenticationType: тип аутентификации в строковом виде
IsAuthenticated: возвращает true
, если пользователь аутентифицирован
Name: возвращает имя пользователя. Как правило, в качестве подобного имени используется логин, по которому пользователь входит в приложение
Для определения аутентифицирован ли пользователь, ASP.NET Core использует аутентификационные куки.
Мы можем применять эти свойства в контроллерах или представлениях:
public IActionResult Index() { if(User.Identity.IsAuthenticated) { return Content(User.Identity.Name); } return Content("не аутентифицирован"); }
Атрибут AllowAnonymous позволяет открыть доступ для анонимных пользователей. Обычно он применяется к методам контроллера, который уже защищен атрибутом Authorize. Например:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; namespace SocialApp.Controllers { [Authorize] public class HomeController : Controller { [AllowAnonymous] public IActionResult Index() { if(User.Identity.IsAuthenticated) { return Content(User.Identity.Name); } return Content("не аутентифицирован"); } public IActionResult About() { return Content("Authorized"); } } }
Здесь доступ ко всей функциональности контроллера Home имеют только аутентифицированные пользователи, за исключением доступа к методу Index: к нему могут обращаться абсолютно все пользователи приложения.