ASP.NET Core Security Data Protection

Introduction to Data Protection

数据保护简介

Web应用程序经常需要存储安全敏感数据。Windows为桌面应用程序提供了DPAPI,但是并不适用于Web应用程序。ASP.NET核心数据保护堆栈提供了使用加密API的简易方法,开发者可以用以保护数据,包括密钥管理和交换。

ASP.NET核心数据保护堆栈设计用户长期替代ASP.NET 1.x-4.x中的<machineKey>元素。该堆栈设计解决就密码堆栈的很多缺点,同时为现代应用程序可能遇到的大多数案例提供解决方案。

Problem statement

问题陈述

  整体问题陈述可以简化概括为一句话:我需要为以后检索提供可持久化的信息存储,但是我并不信任存储机制。用网络术语表示即为“我需要通过不可信的客户端,获取和返回可信状态。”

  一个典型例子就是用户认证cookie或者bearer token。服务器生成一个“I am Groot and have xyz permissions” token 并把它发送给客户端。在将来的某一天,客户端会把这个 token 返回给服务器,但是服务器需要判断客户端没有伪造这个 token。因此第一个要求:真实性(又名完整性、防篡改)。

  基于持久状态是被服务器所信任的,我们预计这种状态可能包含特定环境的信息。这些信息可以文件路径、权限、句柄、间接引用或服务器专用数据。通常情况下这类信息不应该透漏给不可信的客户端,因此产生了第二个需求:保密性。

  最后,因为现代也能够用程序是组件化的,我们看到个别组件会想利用系统而不去考虑系统的其他组件。例如:如果一个bearer token 组件正在使用这个堆栈,它不应受到来自一个可能也在使用同一个堆栈的防CSRF(跨站请求伪造)机制的干扰。因此产生了最后一个需求:隔离性。

  我们可以提供进一步的约束条件,用以缩小需求范围。假设在加密系统内运行的所有服务器是被同样信任的,数据也无需在我们的控制下通过外部服务生成和消耗。另外,我们需要所有运行尽可能的迅速,因为向Web服务器发出的每次请求会一次或多次进入加密系统。这使得对称密码系统称谓我们方案的理想选择。我们可以忽视非对称加密系统,直到需要的时候。

Design philosophy

设计原理

  我们先从现有堆栈着手去发现问题。接下来通过调查现有的解决方案得出结论,现有的解决方案达不到我们的要求。然后,我们再基于一下的几条指导原则设计一个解决方案:

  • 系统应配置简单。理想情况下,系统应是零配置,开发者可以立刻开始投入工作。如果开发人员需要针对某个方面进行配置(例如:密钥资源库),应当考虑使这些设置尽可能简洁。
  • 提供一个简单的面向用户的API,APIs 应该易于正确使用,难以出错。
  • 开发人员应该掌握密钥管理原则,系统应代表开发人员处理算法选择和密钥生成时间。理想情况下,开发人员甚至不应有权访问原始密钥。
  • 如果可能密钥应以休眠状态加以保护。系统应该指定一个合适的默认保护机制,并且自动使用。

  由此出发,我们开发了一个简单易用的数据保护堆栈。

  ASP.NET Core 数据保护 APIs 起初并非用于加密负载的不确定持久性。其他技术例如:Windows CNG DPAPI 和  Azure Rights Management 更适合不确定存储的情况,并且响应的这些技术具有较强的密钥管理能力。尽管如此,也没有什么阻止开发人员使用ASP.NET Core 数据保护 APIs 来长期保护加密数据。

Audience

受众

  数据保护系统分成5个主要模块,APIs 的不同方面面相三类主要受众;

  1. Consumer APIs Overview 面向应用程序和框架开发者。

    “我不想了解堆栈如何运行,如何配置。我只想提高概率的成功使用APIs 以尽可能简单的使用方式。”

  2. configuration APIs 面相应用程序开发人员和系统管理人员。

    “我需要告知数据保护系统,我们环境需要非默认路径和配置。”

  3. 扩展性 APIs 面相负责执行自定义策略的开发人员。这些 APIs 的使用仅限于特殊情况和经验丰富,有安全意识的开发人员。

    “我们需要替换系统内的一个完整组件,因为我们有独一无二的行为需求。我愿意为构建满足需求的一个插件去学习 API 不常用的部分。”

Package Layout

  数据保护堆栈包括五个模块。

  • Microsoft.AspNetCore.DataProtection.Abstractions 包含基本IDataProtectionProvider 和 IDataProtector接口。同时包含可以辅助这些类型(例如:IDataProtector.Protect 的重载)的扩展方法。有关更多信息请参阅用户接口使用部分。如果有人负责实例化数据保护系统,你可以参考,Microsoft.AspNetCore.DataProtection.Abstractions。
  • Microsoft.AspNetCore.DataProtection 包含数据保护系统的核心实现,其中包括核心加密、密钥管理、配置和可扩展性。如果你负责实例化数据保护系统(例如:把它添加到一个IServiceCollection)或修改和扩展其行为,可以参考Microsoft.AspNetCore.DataProtection。
  • Microsoft.AspNetCore.DataProtection.Extensions 包含一些附加 APIs 开发人员可能会用到。但是并不属于核心模块。例如:这个模块包含一个简单的API “将指向一个特定的密钥存储目录实例化,而没有依赖注入到 setup。”  同时,它包括保护有效负载受限制生命周期的扩展方法 (更多信息)。
  • Microsoft.AspNetCore.DataProtection.SystemWeb 可以安装到一个现有的 ASP.Net 4.x 应用程序中,重定向它的<machineKey>运行。该用新的数据保护堆栈。更多信息情参阅 compatibility
  • Microsoft.AspNetCore.Cryptography.KeyDerivation 提供了PBKDF2 密码散列程序的实现和可用于需要安全处理用户密码的系统。更多信息情参阅 Password Hashing 。

  这么多年了第一次发文章,大家多多关照。后续慢慢来~~

时间: 2024-10-14 11:19:39

ASP.NET Core Security Data Protection的相关文章

ASP.NET Core 使用Cookie验证身份

ASP.NET Core 1.x提供了通过Cookie 中间件将用户主体序列化为一个加密的Cookie,然后在后续请求中验证Cookie并重新创建主体,并将其分配给HttpContext.User属性.如果您要提供自己的登录界面和用户数据库,可以使用作为独立功能的Cookie中间件. ASP.NET Core 2.x的一个主要变化是不再存在Cookie中间件.取而代之的是在Startup.cs文件中的Configure方法中的调用UseAuthentication方法会添加设置HttpConte

[转]Session and application state in ASP.NET Core

本文转自:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state By Rick Anderson and Steve Smith+ HTTP is a stateless protocol; the Web server treats each HTTP request as an independent request. The server retains no knowledge of variable va

ASP.NET Core 配置文件(无处不在的依赖注入)

前烟: .NET Core 中取消了以往的 XML 节点配置文件,改用了 *.json 格式. 在 Startup.cs 文件中,构造方法 build appsetting.json 文件, 本文主要对解析配置文件的官方工具类做总结: 一.appsettings.json 文件 在新建的 Core Web 项目中,默认会有一个全局的配置变量:IConfigurationRoot 提供了索引器.GetSection 方法: { "Host": "http://localhost

ASP.NET Core 数据保护(Data Protection)【上】

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 前言 上一篇博客记录了如何在 Kestrel 中使用 HTTPS(SSL), 也是我们目前项目中实际使用到的. 数据安全往往是开发人员很容易忽略的一个部分,包括我自己.近两年业内也出现了很多因为安全问题导致了很多严重事情发生,所以安全对我们开发

[asp.net core]The requested page cannot be accessed because the related configuration data for the page is invalid.

bug HTTP Error 500.19 - Internal Server Error The requested page cannot be accessed because the related configuration data for the page is invalid. 解决办法 这是将asp.net core站的部署在iis上出现的错误,通过dotnet xxx.dll启动,可以看到kestrel,能正常进行访问,也能监听到请求信息,但通过iis代理时出现上面的错误.

ASP.NET Core CSRF defence with Antiforgery

Cross Site Request Forgery (aka CSRF or XSRF) is one of the most common attacks in which the user is tricked into executing an unwanted action through his browser on his behalf, in one of the sites he is currently authenticated. ASP.Net Core contains

asp.net core 系列 15 中间件

原文:asp.net core 系列 15 中间件 一.概述 中间件(也叫中间件组件)是一种装配到应用管道以处理请求和响应的软件. 每个组件:(1)选择是否将请求传递到管道中的下一个组件;(2)可以在管道中的下一个组件之前和之后执行工作. 请求委托用于生成请求管道. 请求委托会处理每个 HTTP 请求.使用以下方法配置请求委托:Run,  Map, Use扩展方法.可以将单个请求委托作为匿名方法(称为内联中间件in-line middleware) 或者可以在可重用类中定义.这些可重用的类和内联

如何在ASP.NET Core中实现一个基础的身份认证

注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET Core中实现一个基础的身份认证 ASP.NET终于可以跨平台了,但是不是我们常用的ASP.NET, 而是叫一个ASP.NET Core的新平台,他可以跨Windows, Linux, OS X等平台来部署你的web应用程序,你可以理解为,这个框架就是ASP.NET的下一个版本,相对于传统ASP.NET程序,它还是有一些不同的地方的,比

ASP.NET Core使用NLog记录日志到Microsoft Sql Server

在之前的文章中介绍了如何在ASP.NET Core使用NLog,本文为您介绍在ASP.NET Core使用NLog记录到Microsoft Sql Server 1.我们需要添加依赖: NLog.Web.AspNetCore System.Data.SqlClient 2.添加nlog.config文件 1 <?xml version="1.0" encoding="utf-8" ?> 2 <nlog xmlns="http://www.