ASP.NET Core 中的数据保护 Api 入门

最简单的是保护数据,包括以下步骤:

  1. 从数据保护提供程序创建数据保护程序。

  2. 用要保护的数据调用 Protect 方法。

  3. 用要返回到纯文本的数据调用 Unprotect 方法。

大多数框架和应用模型(如 ASP.NET Core 或 SignalR)已配置数据保护系统,并将其添加到通过依赖关系注入访问的服务容器。 下面的示例演示如何为依赖关系注入配置服务容器并注册数据保护堆栈,通过 DI 接收数据保护提供程序,创建保护程序并保护然后取消保护数据。

using System;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.Extensions.DependencyInjection;

public class Program
{
    public static void Main(string[] args)
    {
        // add data protection services
        var serviceCollection = new ServiceCollection();
        serviceCollection.AddDataProtection();
        var services = serviceCollection.BuildServiceProvider();

        // create an instance of MyClass using the service provider
        var instance = ActivatorUtilities.CreateInstance<MyClass>(services);
        instance.RunSample();
    }

    public class MyClass
    {
        IDataProtector _protector;

        // the 'provider' parameter is provided by DI
        public MyClass(IDataProtectionProvider provider)
        {
            _protector = provider.CreateProtector("Contoso.MyClass.v1");
        }

        public void RunSample()
        {
            Console.Write("Enter input: ");
            string input = Console.ReadLine();

            // protect the payload
            string protectedPayload = _protector.Protect(input);
            Console.WriteLine($"Protect returned: {protectedPayload}");

            // unprotect the payload
            string unprotectedPayload = _protector.Unprotect(protectedPayload);
            Console.WriteLine($"Unprotect returned: {unprotectedPayload}");
        }
    }
}

/*
 * SAMPLE OUTPUT
 *
 * Enter input: Hello world!
 * Protect returned: CfDJ8ICcgQwZZhlAlTZT...OdfH66i1PnGmpCR5e441xQ
 * Unprotect returned: Hello world!
 */

创建保护程序时,必须提供一个或多个目的字符串 用途字符串提供使用者之间的隔离。 例如,使用 "绿色" 目的字符串创建的保护程序将无法取消保护由 "紫色" 目的的保护程序提供的数据。

提示

IDataProtectionProviderIDataProtector 的实例对于多个调用方是线程安全的。 它的目的是,在组件通过调用 CreateProtector获取对 IDataProtector 的引用时,它会将该引用用于多次调用 ProtectUnprotect

如果无法验证或解密受保护的有效负载,则对 Unprotect 的调用将引发 System.security.cryptography.cryptographicexception。 某些组件可能希望在取消保护操作期间忽略错误;读取身份验证 cookie 的组件可能会处理此错误,并将请求视为根本没有 cookie,而不是完全失败的请求。 需要此行为的组件应专门捕获 System.security.cryptography.cryptographicexception,而不是抑制所有异常。

上一篇:ASP.NET Core 数据保护

下一篇:有关 ASP.NET Core 的使用者 Api 概述

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

扫描二维码
程序员编程王

扫一扫关注最新编程教程