Где хранится информация ClaimsIdentity после вызова AuthenticationManager.SignIn() с использованием CookieAuthenticationProvider

Мы используем Microsoft.Owin.Security.Cookies.CookieAuthenticationProvider в веб-приложении ASP.Net MVC.

Код входа использует пользовательский класс, который отслеживает информацию об авторизации (userRights в приведенном ниже примере). Код выглядит следующим образом:

string auth = JsonConvert.SerializeObject(userRights);
ClaimsIdentity identity = new ClaimsIdentity(new[]
{
    new Claim(ClaimTypes.AuthorizationDecision, auth),
}, DefaultAuthenticationTypes.ApplicationCookie);

AuthenticationManager.SignIn(identity);

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

Исходный код прекрасно скрывает происходящее. В VisualStudio «Перейти к реализации» говорится, что он не может найти реализацию IAuthenticationManager.SignIn, а исходный код Microsoft.Owin.Security.Cookies.CookieAuthenticationProvider просто показывает набор делегатов Action, которые я не могу отлаживать, поскольку у меня нет символов.

Другой проблемой являются атаки повторного воспроизведения файлов cookie. Я думаю о решении обеих потенциальных проблем с помощью хранилища сеансов следующим образом:

Session.Add("AuthorizationDecision", userRights);

и при выходе из системы:

Session.Clear();
Session.Abandon();
AuthenticationManager.SignOut();

Таким образом, я могу быть уверен, что информация не идет к клиенту и не может там манипулировать. Но я могу что-то упустить или мое первоначальное беспокойство может быть беспочвенным (что я не могу проверить из-за неясного кода). Наша команда обеспокоена тем, что «сессия не предназначена для авторизации и может быть не зашифрована или не так безопасна, как использование претензий». Было бы здорово, если бы вы, эксперты, поделились своими мыслями или развеяли мою озабоченность, объяснив, где хранятся претензии.

-- РЕДАКТИРОВАТЬ --

Я пошел дальше и удалил авторизацию из требований аутентификации (поскольку, похоже, никто не знает, где хранится информация). Он может быть кэширован в сеансе, но у сеанса есть полностью независимый срок жизни по сравнению с файлом cookie, поэтому требуется проверка на нуль, а также необходима проверка ClaimsIdentity.IsAuthenticated, когда сеанс не является нулевым.


person Louis Somers    schedule 05.09.2018    source источник


Ответы (1)


был тот же вопрос относительно того, где хранятся данные претензий. относительно вашего беспокойства:

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

Файлы cookie зашифрованы и подписаны, поэтому данные нельзя ни просмотреть, ни подделать на стороне клиента.

person dotnetdeveloper    schedule 20.03.2019
comment
Спасибо, вы прямо не говорите, что userRights хранятся в куки, но если они есть, то они в безопасности... Что ж, я думаю, все еще есть достаточно причин хранить их где-то на стороне сервера. Например, при изменении прав кэш может быть обновлен без необходимости выхода пользователя и повторного входа. Но ваша точка зрения снимает беспокойство по поводу манипуляций с клиентами. - person Louis Somers; 20.03.2019