Авторизация

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 13.12.2019

Ключевым инструментом для авторизации является атрибут 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

Атрибут 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: к нему могут обращаться абсолютно все пользователи приложения.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850