Как войти в систему пользователя в базовом веб-приложении do tNet с помощью Razor Pages, но сохранить данные пользователя скрытыми (не в Cook ie) - PullRequest
2 голосов
/ 15 января 2020

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

Я занимаюсь разработкой в ​​Asp. Net уже год, и мы использовали сессию для сохранения постоянных пользовательских данных. на протяжении всего сеанса пользователя (например, электронная почта, имя, телефон, компания и т. д. c ..). И если я не ошибаюсь, что информация была скрыта, потому что не в кулинарии ie и не видна в браузере.

Теперь мы начинаем разрабатывать в. Net Core 3.1 и я ' Я должен восстановить логин, используя эту новую платформу, при условии, что постоянные пользовательские данные не хранятся в кулинарии ie или не видны для браузера, они должны быть безопасными и скрытыми.

Я посмотрел в. Net Core Session и Auth Cook ie, но для обоих этих вариантов мы создаем куки, которые хранят всю эту информацию, в обоих этих подходах информация безопасна или уязвима?

Через некоторое время я наткнулся на эту область в документации Microsoft: Введение в идентификацию на ASP. NET Ядро

У меня вопрос, если я go с этим Подход может ли я выполнить sh то, что я хочу, иметь постоянные пользовательские данные не в кулинарии ie или не видны для браузера. Если то, что я пытаюсь выполнить, sh невозможно, и нужно использовать cook ie, есть ли способ сохранить эти данные в безопасности и безопасности? Или есть другой подход к обеспечению безопасности данных в течение сеанса и их невидимости для браузера?

РЕДАКТИРОВАТЬ: Чтобы привести более практический пример, в нашей панели инструментов мы будем фильтровать данные в зависимости от пользователя, точнее его Тип, Компания, Площадь и Канал, это атрибуты каждого пользователя. Когда пользователь входит в систему и перенаправляется на панель мониторинга, он видит только те данные, которые имеют те же атрибуты, что и он. В Asp. Net все, что мне нужно было сделать, это сохранить эту информацию в момент входа в систему в сессии, а затем извлечь ее, когда они мне понадобятся. В. Net Core, я смог сделать это двумя разными способами, первым было использовать «HttpContext.Session.SetString()» и «HttpContext.Session.GetString()» для сохранения и извлечения необходимых мне данных. Второй способ состоял в том, чтобы передать данные в Заявки, когда я выполняю «HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authenticationProperties);». Оба этих подхода позволяют мне получать нужную информацию и использовать ее. Но все данные находятся внутри файлов cookie, видимых в браузере.

Но для того, что я понимаю. Net Ядро не позволяет сохранять такие данные на стороне сервера, поэтому возможно зашифровать auth cook ie, поэтому данные остаются защищенными.

Мой код для входа в систему пользователя выглядит следующим образом:

После аутентификации пользователя я запускаю его, чтобы войти в систему и создать auth cook ie.

string userGUID = Guid.NewGuid().ToString();

List<Claim> claims = new List<Claim>()
{
    new Claim(ClaimTypes.NameIdentifier, userGUID),
    new Claim(ClaimTypes.Role, "Admin"),
    new Claim("Company", "User Company"),
    new Claim("Area", "User Area"),
    new Claim("Channel", "User Channel")
};

if (claims != null && claims.Count > 0)
{
    var claimsIdentity = new ClaimsIdentity(
        claims, CookieAuthenticationDefaults.AuthenticationScheme);

    AuthenticationProperties authenticationProperties = new AuthenticationProperties
    {
        IsPersistent = false,
        AllowRefresh = false,
        ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30)
    };

    _httpContextAccessor.HttpContext.SignInAsync(
               CookieAuthenticationDefaults.AuthenticationScheme, 
               new ClaimsPrincipal(claimsIdentity), 
               authenticationProperties);

}

Еще раз спасибо за ваше время и, пожалуйста, скажите мне, могу ли я что-то сделать, чтобы прояснить этот вопрос.

1 Ответ

1 голос
/ 17 января 2020

Во-первых, я еще не сделал Аутентификацию в. Net Ядро, но я пока знаю, что если я был в вашем случае, я попытаюсь использовать OpenId , как в Рекомендации MS ты упомянул.

Если ваши пользователи не аутентифицированы внешним провайдером, таким как Google, Facebook и т. Д. c ..., вам придется создать свой собственный сервер аутентификации Oauth2. То, что я сделал еще в 2016 году, но в. Net Framework 4 нет. Net Core. Однако, хотя сегодня это все еще возможно, я не буду рекомендовать инвестировать в. Net Framework as . Net (Core) 5 сделает его устаревшим в ноябре 2020 года. Но для вашей информации вы можете обратиться к ответ здесь: Как реализовать сервер oauth2 в ASP. NET MVC 5 и WEB API 2 [закрыто]

Если вы хотите go при создании вашего свой OAuth-провайдер. Я предлагаю вам посмотреть на этот ответ здесь: OAuth-авторизация в ASP. NET Core

Хотя с "cook ie" он мог только сохраните токен аутентификации . Я имею в виду, что сервер OAuth предоставляет токен каждый раз, когда пользователь проходит аутентификацию. Этот токен должен быть действителен в течение определенного периода времени (скажем, 20 минут). Тогда этот токен становится недействительным после.

Чтобы пользователь оставался на связи, вам наверняка потребуется механизм автоматического его обновления. Допустим, токен действителен в течение 20 минут, если сервер получил запрос, в то время как токен все еще действителен, но только в течение следующих 10 минут, а затем сервер просит поставщика OAuth обновить его и вернуть его браузеру, чтобы обновить его "сварить ie".

Насколько я помню, мы использовали поле Http Header Authorization (а не cook ie) для отправки токена при каждом запросе и обработки его времени жизни (истечения / продления) в браузере с использованием javascript ajax запрос и локальное хранилище.

...