Введение

Часто веб приложения хранят чувствительные данные. Windows предлагает DPAPI для десктоп приложений, но это неудобно для веб приложений. Стек защиты данных в ASP.NET Core предлагает простой способ для реализации этой цели.

Стек защиты данных в ASP.NET Core считается заменителем элемента <machineKey> в ASP.NET 1.x - 4.x. Он предлагает решения для большинства случаев, которые могут встретиться в современном приложении.

Определение проблемы

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

Классическим примером этого являются куки аутентификации. Сервер генерирует токен и отправляет его клиенту. Далее клиент отправляет этот токен обратно серверу, а серверу нужно убедиться, что клиент не забыл этот токен. То есть, первым требованием является аутентификация.

Кроме того, у нас может присутствовать информация, которую мы не можем предоставить не доверенному клиенту. Так что второе требование - конфиденциальность.

Наконец, поскольку современные приложения состоят из разных компонентов, токены в одном стеке не должны зависеть друг от друга. Последнее требование - изоляция.

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

Философия дизайна

Мы начали с определения проблемы с существующим стеком. После этого мы поняли, что нет оптимальных решений этой проблемы. А затем мы нашли решение, основываясь на нескольких принципах.

  • Система должна предлагать простоту конфигурации. В идеале систему вообще не нужно настраивать, и разработчики могут сразу же начать работу. В ситуациях, когда разработчикам нужно настроить определенный аспект (например, репозиторий), то конкретно эта настройка должна быть простой.
  • Простой API. API должны быть простыми при корректном использовании и сложными - при некорректном.
  • Разработчикам не нужно изучать основные принципы. Система должна обрабатывать выбор алгоритма по желанию разработчика. В идеале разработчики вообще не должны иметь доступ к сырому ключевому материалу.
  • По возможности ключи всегда должны быть защищены. Система должна найти соответствующий механизм защиты и применить его автоматически.

Следуя этим принципам, мы создали простой стек защиты данных.

Цели

Система защиты данных разделена на пять основных аспектов. Различные аспекты этих API нацелены на три разные категории:

  1. Обзор потребительских API нацелен на разработчиков приложений и фреймворков.
“Я не хочу знать, как работает стек или как он настроен. Я просто хочу выполнять некоторые операции, успешно используя API”.
  1. Конфигурационные API нацелены на разработчиков приложений и системных администраторов.
“Мне нужно сказать системе защиты данных, что моей среде нужны пути и настройки не по умолчанию”.
  1. Расширенные API нацелены на разработчиков, которые реализуют пользовательскую политику. Использование таких API очень сильно ограничено.
“Мне нужно заменить весь компонент внутри системы, поскольку я хочу реализовать уникальные поведенческие требования. Поэтому я хочу изучить код, чтобы написать плагин, выполняющий мои требования”.

Пакеты

Стек защиты данных состоит из пяти пакетов.

  • Microsoft.AspNetCore.DataProtection.Abstractions содержит базовые интерфейсы IDataProtectionProvider и IDataProtector. Также он содержит полезные методы расширения, которые помогают в работе с этими типами (например, переопределенные варианты IDataProtector.Protect). Если кто-то другой отвечает за создание экземпляра системы защиты данных, а вы просто используете API, то вам нужно ссылаться на Microsoft.AspNetCore.DataProtection.Abstractions.
  • Microsoft.AspNetCore.DataProtection содержит основную реализацию системы защиты данных, включая основные криптографические операции, управление ключами, конфигурацию и расширяемость. Если вы отвечаете за создание экземпляра системы защиты данных (например, добавляете его в IServiceCollection) или меняете ее поведение, то вам потребуется Microsoft.AspNetCore.DataProtection.
  • Microsoft.AspNetCore.DataProtection.Extensions содержит дополнительные API, которые могут быть полезны, но не относятся к основному пакету. Здесь также содержатся методы расширения для ограничения жизненного цикла защищенных активов.
  • Microsoft.AspNetCore.DataProtection.SystemWeb можно внедрить в существующие ASP.NET 4.x приложения, чтобы перенаправить <machineKey> операции, чтобы оно использовало новый стек защиты данных. См. совместимость.
  • Microsoft.AspNetCore.Cryptography.KeyDerivation предлагает реализацию хэша паролей PBKDF2 и может использоваться системами, которым нужно обрабатывать пользовательские пароли. См. Хэш пароля.
Поделись хорошей новостью с друзьями!
Следи за новостями!