目的层次结构和 ASP.NET Core 中的多租户

由于IDataProtector也是隐式IDataProtectionProvider,目的可以链接在一起。 在这种情况下,provider.CreateProtector([ "purpose1", "purpose2" ])等效于provider.CreateProtector("purpose1").CreateProtector("purpose2")

这允许通过数据保护系统的一些有趣的层次结构关系。 在上例中的Contoso.Messaging.SecureMessage,可以调用 SecureMessage 组件provider.CreateProtector("Contoso.Messaging.SecureMessage")一次前期和到专用缓存的结果_myProvider字段。 然后可以通过调用创建将来的保护程序_myProvider.CreateProtector("User: username"),并且这些保护程序将用于保护单个消息。

这也可以被翻转。 哪些主机可以使用其自己的身份验证和状态管理系统配置 (一个 CMS 似乎是合理) 的多个租户,以及每个租户,请考虑单个逻辑应用程序。 总括性应用程序具有单一的主提供程序,并且它将调用provider.CreateProtector("Tenant 1")provider.CreateProtector("Tenant 2")为每个租户提供其自己的数据保护系统的独立的切片。 租户然后可以派生他们自己单独的保护程序,基于其自身的需求,但不管如何努力尝试不能创建其发生冲突的保护程序与其他任何租户系统中。 以图形方式,这表示如下所示。

多租户目的

警告

此操作假定涵盖性应用程序控制哪些 Api 可供各个租户和租户不能在服务器上执行任意代码。 如果租户可以执行任意代码,它们可以执行专用的反射来中断隔离保证,或它们只是无法直接读取主密钥密钥材料和派生任何子项力度。

数据保护系统实际上使用其默认的箱配置中的多租户的排序。 默认情况下工作进程帐户的用户配置文件文件夹 (或用于 IIS 应用程序池标识注册表) 中存储主密钥的密钥材料。 但它实际上相当通常使用单个帐户来运行多个应用程序,并因此所有这些应用程序将最终共享主密钥材料。 若要解决此问题,数据保护系统将自动作为整体的用途链中的第一个元素插入唯一对每个应用程序标识符。 此隐式提供给将单个应用程序隔离从另一个方法是有效地将每个应用程序,如系统和保护程序的创建过程中唯一租户看起来与上面的图像相同。

上一篇:在 ASP.NET Core 目的字符串

下一篇:在 ASP.NET Core中的哈希密码

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程