Introduzione a Data Protection API in ASP.NET CoreGet started with the Data Protection APIs in ASP.NET Core

Nei più semplici, la protezione dei dati prevede i passaggi seguenti:At its simplest, protecting data consists of the following steps:

  1. Creare un dati protezione da un provider di protezione dati.Create a data protector from a data protection provider.

  2. Chiamare il Protect metodo con i dati da proteggere.Call the Protect method with the data you want to protect.

  3. Chiamare il Unprotect metodo con i dati a cui si desidera riconvertire in testo normale.Call the Unprotect method with the data you want to turn back into plain text.

La maggior parte dei Framework e modelli di app, ad esempio ASP.NET Core o SignalR, configurare il sistema di protezione dati già e aggiungerlo a un contenitore del servizio che accedere tramite inserimento delle dipendenze.Most frameworks and app models, such as ASP.NET Core or SignalR, already configure the data protection system and add it to a service container you access via dependency injection. L'esempio seguente viene illustrata la configurazione di un contenitore del servizio per l'inserimento delle dipendenze e la registrazione lo stack di protezione dati, riceve il provider di protezione dati tramite l'inserimento delle dipendenze, creazione di una protezione e rimozione della protezione e la protezione dei dati.The following sample demonstrates configuring a service container for dependency injection and registering the data protection stack, receiving the data protection provider via DI, creating a protector and protecting then unprotecting data.

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!
 */

Quando si crea un programma di protezione è necessario fornire uno o più stringhe di scopi.When you create a protector you must provide one or more Purpose Strings. Una stringa scopo fornisce isolamento tra i consumer.A purpose string provides isolation between consumers. Ad esempio, una protezione creata con una stringa di utilizzo generico di "green" sarebbe in grado di rimuovere la protezione dei dati forniti da una protezione con uno scopo della "viola".For example, a protector created with a purpose string of "green" wouldn't be able to unprotect data provided by a protector with a purpose of "purple".

Suggerimento

Le istanze di IDataProtectionProvider e IDataProtector sono thread-safe per i chiamanti di più.Instances of IDataProtectionProvider and IDataProtector are thread-safe for multiple callers. È destinato che una volta che un componente ottiene un riferimento a un IDataProtector tramite una chiamata verso CreateProtector, che fanno riferimento a verranno utilizzate per più chiamate a Protect e Unprotect.It's intended that once a component gets a reference to an IDataProtector via a call to CreateProtector, it will use that reference for multiple calls to Protect and Unprotect.

Una chiamata a Unprotect genererà CryptographicException se il payload protetto non può essere verificato o decifrato.A call to Unprotect will throw CryptographicException if the protected payload cannot be verified or deciphered. Alcuni componenti può essere utile ignorare gli errori durante rimuovere la protezione di operazioni; un componente che legge i cookie di autenticazione può gestire questo errore e trattare la richiesta come se non avesse alcun cookie affatto anziché Nega la richiesta direttamente.Some components may wish to ignore errors during unprotect operations; a component which reads authentication cookies might handle this error and treat the request as if it had no cookie at all rather than fail the request outright. I componenti che questo comportamento devono in particolare intercettare CryptographicException invece di assorbimento di tutte le eccezioni.Components which want this behavior should specifically catch CryptographicException instead of swallowing all exceptions.