目录保障 ASP.NET Core Web API 中的数据传输一种自定义加密实现先决条件建筑概览实施分解组件 1SecureHttpAttribute 工厂组件 2SecureHttpFilter 执行加密配置实施整合控制器配置客户端实现Axios拦截器配置加密工具安全分析操作方面的考虑结论如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。保障 ASP.NET Core Web API 中的数据传输一种自定义加密实现在现代 Web 应用程序开发中保护网络传输过程中的敏感数据是一项至关重要的安全需求。本技术指南提供了一种强大的解决方案通过自定义属性和加密过滤器在 ASP.NET Core Web API 中实现端到端加密确保请求和响应有效负载均使用行业标准的 AES 加密进行保护。先决条件为了有效实施此解决方案开发人员应具备以下能力具备 ASP.NET Core 中间件架构的工作知识理解对称加密原理特别是AES高级加密标准.NET 6 开发环境熟悉 REST API 设计模式建筑概览我们的实现方案在 ASP.NET Core 请求处理管道中采用了双组件策略SecureHttpAttribute用于需要加密的控制器/操作的声明性标记SecureHttpFilter一个处理加密操作的可执行过滤器该设计利用 ASP.NET Core 的筛选管道在 HTTP 消息体跨越网络边界之前对其进行拦截和转换同时通过基于属性的配置保持关注点分离。实施分解组件 1SecureHttpAttribute 工厂[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]public class SecureHttpAttribute : Attribute, IFilterFactory{public bool IsReusable false;public IFilterMetadata CreateInstance(IServiceProvider serviceProvider){var config serviceProvider.GetRequiredServiceIOptionsSystemSettings();return new SecureHttpFilter(config.Value);}}主要功能AttributeTarget 规范支持在控制器类和端点方法级别应用。过滤器实例化从依赖注入的配置中检索加密参数生命周期管理不可重用的实例确保每次请求都使用全新的加密上下文组件 2SecureHttpFilter 执行public class SecureHttpFilter : IAsyncResourceFilter{private readonly Aes _cryptoProvider;public SecureHttpFilter(SystemSettings settings){_cryptoProvider InitializeAes(settings.DataEncryptionKey);}public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next){context.HttpContext.Request.Body DecryptInputStream(context.HttpContext.Request.Body);context.HttpContext.Response.Body EncryptOutputStream(context.HttpContext.Response.Body);if (context.HttpContext.Request.QueryString.HasValue){var decodedQuery DecodeString(context.HttpContext.Request.QueryString.Value[1..]);context.HttpContext.Request.QueryString new QueryString($?{decodedQuery});}await next();await context.HttpContext.Request.Body.DisposeAsync();await context.HttpContext.Response.Body.DisposeAsync();}private CryptoStream EncryptOutputStream(Stream outputStream){var encryptor _cryptoProvider.CreateEncryptor();var base64Transform new ToBase64Transform();var encodedStream new CryptoStream(outputStream, base64Transform, CryptoStreamMode.Write);return new CryptoStream(encodedStream, encryptor, CryptoStreamMode.Write);}private CryptoStream DecryptInputStream(Stream inputStream){var decryptor _cryptoProvider.CreateDecryptor();var base64Transform new FromBase64Transform(FromBase64TransformMode.IgnoreWhiteSpaces);var decodedStream new CryptoStream(inputStream, base64Transform, CryptoStreamMode.Read);return new CryptoStream(decodedStream, decryptor, CryptoStreamMode.Read);}private string DecodeString(string encryptedText){using var memoryStream new MemoryStream(Convert.FromBase64String(encryptedText));using var cryptoStream new CryptoStream(memoryStream, _cryptoProvider.CreateDecryptor(), CryptoStreamMode.Read);using var reader new StreamReader(cryptoStream);return reader.ReadToEnd();}}执行流程请求解密入站有效负载在控制器处理之前进行解密。响应加密出站数据在传输前会进行加密。查询参数处理URL参数会自动解码。资源清理加密流在处理后得到妥善处置加密配置private static Aes InitializeAes(string secretKey){var paddedKey secretKey.PadRight(32, 0);var aes Aes.Create();aes.Key Encoding.UTF8.GetBytes(paddedKey[..32]);aes.IV Encoding.UTF8.GetBytes(paddedKey[..16]);aes.Mode CipherMode.CBC;aes.Padding PaddingMode.PKCS7;return aes;}安全参数密钥派生256 位密钥长度密钥材料扩展采用零填充密码配置采用 PKCS7 填充的 CBC 模式可提供可靠的分组密码操作IV 生成从密钥前缀导出的初始化向量可增强加密强度实施整合控制器配置课堂应用[SecureHttp][Route(api/[controller])]public class ConfidentialController : ControllerBase{[HttpPost]public IActionResult SubmitConfidentialData([FromBody] ConfidentialPayload payload){return Ok(payload.Process());}}行动级别应用[Route(api/[controller])]public class ConfidentialController : ControllerBase{[SecureHttp][HttpPost]public IActionResult SubmitConfidentialData([FromBody] ConfidentialPayload payload){return Ok(payload.Process());}}客户端实现Axios拦截器配置import axios from axios;import { API_ROOT } from ../../constants/NetworkConfig;import { encodePayload, decodePayload } from ../../utilities/securityUtils;const protectedAPI axios.create({ baseURL: API_ROOT });protectedAPI.interceptors.request.use((config) {const [path, params] config.url ? config.url.split(?) : [];if (params) {config.url ${path}?${encodePayload(params)};}if (config.data) {config.headers[Content-Type] application/json;config.transformRequest encodePayload;}config.transformResponse decodePayload;return config;});拦截器功能自动查询参数加密请求体转换响应有效载荷解密加密工具import CryptoJS from crypto-js;import { ENCRYPTION_SECRET } from ../constants/appSettings;const secretPadded ENCRYPTION_SECRET.padEnd(32, 0);const secureKey CryptoJS.enc.Utf8.parse(secretPadded.substring(0, 32));const ivParameter CryptoJS.enc.Utf8.parse(secretPadded.substring(0, 16));const securityConfig {iv: ivParameter,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7};export const encodePayload (input) {if (input null || input undefined) return input;const inputData CryptoJS.enc.Utf8.parse(typeof input string ? input : JSON.stringify(input));const encrypted CryptoJS.AES.encrypt(inputData, secureKey, securityConfig);return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);};export const decodePayload (encodedInput) {if (!encodedInput) return encodedInput;try {const encryptedData CryptoJS.enc.Base64.parse(encodedInput);const decrypted CryptoJS.AES.decrypt({ ciphertext: encryptedData },secureKey,securityConfig).toString(CryptoJS.enc.Utf8);try {return JSON.parse(decrypted);} catch (_) {return decrypted;}} catch (_) {return encodedInput;}};客户安全注意事项客户端和服务器之间的密钥同步用于网络安全传输的 Base64 编码结构化数据的 JSON 有效负载处理安全分析该方案提供了多层保护有效载荷保密性AES-256 加密保护消息内容数据完整性CBC 模式可防止位翻转攻击身份验证绑定共享加密密钥验证端点合法性查询参数保护URL 参数享有与请求体内容同等的安全保护。操作方面的考虑密钥管理加密密钥的安全存储和轮换性能影响加密操作会增加约 10-15% 的延迟开销。兼容性正确配置后可与标准 API 测试工具配合使用。错误处理实现解密失败的备用机制结论这种架构模式展示了一种在 ASP.NET Core Web API 中实现透明加密的有效方法。通过利用框架原生过滤器管道和基于属性的编程开发人员可以在不影响代码可维护性的前提下强制执行加密策略。客户端实现完善了安全闭环确保从浏览器到后端的端到端保护。如果采用安全的密钥管理措施并正确实施该解决方案可达到或超过数据传输保护的行业标准尤其适用于处理财务数据、医疗记录或其他受监管合规要求约束的敏感信息的应用程序。如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。