Иерархия purpose и части приложения

Поскольку IDataProtector полностью зависит от IDataProtectionProvider, purposes можно соединять. В данном случае provider.CreateProtector([ “purpose1”, “purpose2” ]) эквивалентен provider.CreateProtector(“purpose1”).CreateProtector(“purpose2”).

Таким способом мы можем выстроить интересную иерархию в системе защиты данных. В предыдущем примере Contoso.Messaging.SecureMessage компонент SecureMessage может вызвать provider.CreateProtector(“Contoso.Messaging.SecureMessage”) и кэшировать результат в поле private _myProvider. Далее можно создавать механизмы защиты, вызывая _myProvider.CreateProtector(“User: username”), и эти механизмы защиты можно использовать для защиты отдельных сообщений.

Кроме того, представьте себе одно логическое приложение, которое хостит несколько частей. Каждая часть может иметь свою собственную систему аутентификации и систему управления состоянием. В нашем приложении есть один провайдер и он вызывает provider.CreateProtector(“Tenant 1”) и provider.CreateProtector(“Tenant 2”), чтобы предоставить каждой части приложения свою собственную часть системы защиты данных. Части приложения затем могут извлекать отдельные механизмы защиты, основываясь на своих потребностях, но как бы они не старались, они не смогут создавать механизмы защиты, которые касаются других частей приложения. Это выглядит вот так:

../../../_images/purposes-multi-tenancy.png

Предупреждение

TПриложение контролирует, какие API доступны для отдельных частей приложения, а также управляет тем, что части приложения не могут выполнять произвольный код на сервере. Если часть приложения может выполнять произвольный код, она может использовать рефлексию, чтобы сломать изоляцию или может напрямую считать ключи.

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

Поделись хорошей новостью с друзьями!
Следи за новостями!