Являются ли заявления ASP.NET Core надежными и защищенными от несанкционированного доступа?

У меня есть несколько разных типов пользователей (InternalUser, Clinician и Patient), которые могут входить на мой веб-сайт, поэтому для каждого типа пользователей я создал пользовательский класс, унаследованный от ApplicationUser.

Если авторизованный пользователь заходит на главную страницу веб-сайта (https://example.com/), тогда MVC код контроллера должен выяснить, какой это тип пользователя, чтобы он мог вернуть перенаправление на правильную «главную» страницу (https://example.com/clinician, https://example.com/patient и т. д. .).

Мне кажется разумным использовать заявку как простой и недорогой способ различать тип пользователя в контроллере без необходимости загружать текущего пользователя из базы данных. Когда я регистрирую пользователя, я добавляю утверждение, которое представляет "тип" пользователя:

await _userManager.AddClaimAsync("ihi:user_type", "clinician");

Затем в контроллере проверяю претензию:

[Authorize]
public IActionResult Index()
{
    if (User.HasClaim("ihi:user_type", "clinician")) return Redirect("...");
    if (User.HasClaim("ihi:user_type", "patient")) return Redirect("...");
    if (User.HasClaim("ihi:user_type", "internal")) return Redirect("...");

    throw new InternalErrorException("Logged in user is not in a recognized user role");
}

У меня есть пара вопросов по этой схеме:

  1. Это разумный подход?
  2. Эта схема (как атрибут [Authorize], так и мои проверки утверждений) основывается на просмотре значения файла cookie. Безопасны ли данные, хранящиеся в этом файле cookie, от несанкционированного доступа? (Я бы на это надеялся, иначе злоумышленник может изменить cookie и сыграть в систему идентификации.)

person Bob.at.Indigo.Health    schedule 03.11.2018    source источник


Ответы (1)


Это разумный подход?

Да, это общий подход, учитывая, что внутри файла cookie Identity есть все утверждения.

Безопасны ли данные, хранящиеся в этом файле cookie, от несанкционированного доступа?

Из документы:

SignInAsync создает зашифрованный файл cookie и добавляет его в текущий ответ. Если вы не укажете AuthenticationScheme, будет использоваться схема по умолчанию.

Под обложками используется шифрование системы защиты данных ASP.NET Core.

Как видите, здесь, вы можете выполнить множество настроек системы защиты данных, в том числе использовать сертификаты для создания / защиты ключей, используемых для шифрования идентификационных файлов cookie, и использовать эфемерные ключи, чтобы все файлы cookie навсегда терялись при закрытии. вниз по приложению.

В целом, если вам не нужен высокий уровень безопасности, настроек по умолчанию более чем достаточно.

person Camilo Terevinto    schedule 03.11.2018