ASP.NET Core 数据保护

Web 应用程序通常需要将安全敏感数据存储。 Windows 桌面应用程序提供 DPAPI,但这并不适合 web 应用程序。 ASP.NET Core 数据保护堆栈提供一个简单、 易于使用的加密 API,开发人员可以使用来保护数据,包括密钥管理和旋转。

ASP.NET Core 数据保护堆栈旨在用作的长期替代<machineKey>在 ASP.NET 中的元素 1.x-4.x。 它旨在解决许多旧加密堆栈的不足之处同时为大多数现代应用程序可能会遇到的使用情况下提供开箱解决方案。

问题陈述

总体问题语句可以用于简单地在单个句子中所述:我需要保留以供将来检索受信任的信息,但我不信任持久性机制。 在 web 术语中,这可能会根据写入"我需要为往返通过不受信任的客户端的受信任状态。"

此规范的示例是身份验证 cookie 或持有者令牌。 服务器会生成"我是 Groot,具有 xyz 的权限"令牌并将它传递到客户端。 在将来某天的客户端将显示该令牌发送回服务器,但该服务器需要某种类型的客户端尚未伪造令牌的保障。 因此第一个要求: 真实性 (也称为 完整性、 防篡改攻击)。

持久化的状态由服务器信任的因为我们预计这种状态可能包含特定于操作环境的信息。 这可能是在文件路径、 权限、 句柄或其他间接引用的窗体或其他一些特定于服务器的数据。 此类信息通常不应公开到不受信任的客户端。 因此第二个要求: 保密性。

最后,现代应用程序的组件化,因为我们已了解是各个组件将想要充分利用此系统而不考虑其他组件的系统中。 例如,如果持有者令牌组件使用的此堆栈,它应运行不受干扰地从一种反 CSRF 机制,也可能使用相同的堆栈。 因此最后一项要求: 隔离。

我们可以进一步约束以缩小我们的要求的范围。 我们假定加密系统内的所有服务都是同等信任和数据无需生成或在我们的直接控制服务外部使用。 此外,我们需要的操作是尽可能快,因为 web 服务的每个请求可能会经过加密系统的一个或多个时间。 这使得对称加密非常适合用于我们的方案,和我们可以折扣此类具有所需的时间之前的非对称加密。

设计理念

我们首先使用现有的堆栈识别问题。 一旦我们有的我们的调查了现有解决方案布局而得出的结论是,没有现有的解决方案没有我们查找的功能。 然后,我们设计基于多个指导原则的解决方案。

  • 系统应提供简单的配置。 理想情况下系统将为零配置,并且开发人员可以快速开始使用。 在开发人员需要配置一个特定方面 (如密钥存储库) 的情况下,应考虑到使这些特定的配置更简单。

  • 提供一个简单的面向消费者的 API。 Api 应易于正确使用且难以使用不正确。

  • 开发人员不应了解密钥管理原则。 系统应处理算法选择和开发人员的代表的密钥生存期。 理想情况下,开发人员甚至不应具有访问原始密钥材料。

  • 应尽可能的静态保护密钥。 系统应找出相应的默认保护机制,并将其自动应用。

记住这些原则与我们开发了一个简单易于使用数据保护堆栈。

ASP.NET Core 数据保护 Api 主要不用于机密负载的无限期持久性。 等其他技术Windows CNG DPAPIAzure Rights Management更适合的无限期存储方案,并且必须相应地强密钥管理功能。 也就是说,无需进行任何开发人员禁止使用 ASP.NET Core 数据保护 Api 进行长期保护的机密数据。

读者

数据保护系统分为五个主要的软件包。 这些 Api 的各个方面定位三个主要受众;

  1. 使用者 Api 概述目标应用程序和框架开发人员。

    "我不想要了解有关在堆栈的运行方式或配置方式。 我只是想要执行某项操作中的最简单的方式尽可能高概率为成功使用 Api。"

  2. 配置 Api目标应用程序开发人员和系统管理员。

    "我需要告诉我的环境需要非默认路径或设置数据保护系统。"

  3. 扩展性 Api 目标,开发人员负责实现自定义策略。 这些 Api 的使用情况将限于极少数情况下并遇到安全注意开发人员。

    "我需要替换的整个系统内组件,因为我有真正独特的行为要求。 我愿意以了解不常见使用的 API 图面部分,若要生成可满足我的要求的插件。"

包布局

数据保护堆栈包含五个包。

其他资源

在 Web 场中托管 ASP.NET Core

上一篇:使用 ASP.NET Core 中的特定方案授权

下一篇:ASP.NET Core 中的数据保护 Api 入门

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

扫描二维码
程序员编程王

扫一扫关注最新编程教程