ASP.NET Core için tüketici API 'Lerine genel bakış

IDataProtectionProviderVe IDataProtector arabirimleri, tüketicilerinin veri koruma sistemini kullanan temel arabirimlerdir. Bunlar Microsoft. AspNetCore. DataProtection. soyutlamalar paketinde bulunur.

Idataprotectionprovider

Sağlayıcı arabirimi, veri koruma sisteminin kökünü temsil eder. Verileri korumak veya korumayı kaldırmak için doğrudan kullanılamaz. Bunun yerine, IDataProtector IDataProtectionProvider.CreateProtector(purpose) Amaç, hedeflenen tüketici kullanım durumunu açıklayan bir dize olan çağırarak, çağırarak öğesine bir başvuru almalıdır. Bu parametrenin amacı hakkında daha fazla bilgi ve uygun bir değer seçme hakkında daha fazla bilgi için bkz. Amaç dizeleri .

Idataprotector

Koruyucu arabirimi, öğesine yapılan bir çağrı tarafından döndürülür CreateProtector ve bu arabirim, tüketicilerin koruma ve kaldırma işlemleri gerçekleştirmek için kullanabileceği bu arabirimdir.

Bir veri parçasını korumak için verileri Protect metoduna geçirin. Temel arabirim, Byte []-> Byte [] ' ı dönüştüren bir yöntemi tanımlar, ancak dize > dizesini dönüştüren aşırı yükleme (uzantı yöntemi olarak sağlanmış) de vardır. İki yöntem tarafından sunulan güvenlik aynıdır; geliştirici, kullanım durumu için hangi aşırı yükün en kullanışlı olduğunu seçmelidir. Seçilen aşırı yükleme ne olursa olsun, koruma yöntemi tarafından döndürülen değer artık korunur (şifreleme ve üzerinde oynanarak denetlenen) ve uygulama onu güvenilmeyen bir istemciye gönderebilir.

Daha önce korunan bir veri parçasının korumasını kaldırmak için korumalı verileri Unprotect yöntemine geçirin. (Geliştiriciye kolaylık olması için Byte [] tabanlı ve dize tabanlı aşırı yüklemeler vardır.) Korumalı yük bu aynı üzerinde daha önceki bir çağrı tarafından oluşturulduysa Protect IDataProtector , Unprotect yöntemi orijinal korumasız yükü döndürür. Korunan yük üzerinde oynanmış veya farklı bir ile üretildiyse IDataProtector , Unprotect Yöntem CryptographicException oluşturur.

Aynı ve kavramı, IDataProtector Amaç kavramıyla farklıdır. IDataProtectorAynı köke sahip, IDataProtectionProvider ancak çağrısında farklı amaç dizeleri aracılığıyla iki örnek IDataProtectionProvider.CreateProtector oluşturulduklarında, farklı koruyucularıkabul edilir ve diğeri tarafından oluşturulan yüklerin korumasını kaldırılamaz.

Bu arabirimleri kullanma

Dı kullanan bir bileşen için, istenen kullanım, bileşenin IDataProtectionProvider oluşturucusunda bir parametre aldığı ve bileşen BAŞLATıLDıĞıNDA dı sisteminin otomatik olarak bu hizmeti sağladığını sunmasıdır.

Not

bazı uygulamalar (konsol uygulamaları veya ASP.NET 4. x uygulamaları gibi), burada açıklanan mekanizmayı kullanamaz. Bu senaryolar için, ara ' ya geçmeden bir sağlayıcının örneğini alma hakkında daha fazla bilgi için, bu olmayan duyarlı senaryolar belgesine başvurun IDataProtection .

Aşağıdaki örnek üç kavram göstermektedir:

  1. Veri koruma sistemini hizmet kapsayıcısına ekleme,

  2. Bir örneğini almak için DI kullanma IDataProtectionProvider ve

  3. Kaynağından bir oluşturup IDataProtector IDataProtectionProvider , verileri korumak ve korumayı kaldırmak için kullanarak.

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

Microsoft. AspNetCore. DataProtection. soyutlamalar paketi geliştirici kolaylığı olarak bir genişletme yöntemi içerir IServiceProvider.GetDataProtector . Hem hizmet sağlayıcısından hem de çağırarak, tek bir işlem olarak Kapsüller IDataProtectionProvider IDataProtectionProvider.CreateProtector . Aşağıdaki örnek kullanımını gösterir.

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();
 
        // get an IDataProtector from the IServiceProvider
        var protector = services.GetDataProtector("Contoso.Example.v2");
        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}");
    }
}

İpucu

Ve örnekleri IDataProtectionProvider , IDataProtector birden çok çağıranlar için iş parçacığı güvenlidir. Bir bileşen bir öğesine çağrısıyla öğesine bir başvuru aldıktan sonra IDataProtector CreateProtector , ve ' a yönelik birden çok çağrı için bu başvuruyu kullanacaktır Protect Unprotect . UnprotectKorumalı yük doğrulanamazsa veya çözümlenememişse, öğesine yapılan bir çağrı CryptographicException oluşturur. Bazı bileşenler, kaldırma işlemleri sırasında hataları yoksaymak isteyebilir; kimlik doğrulamasını okuyan bir bileşen cookie Bu hatayı işleyebilir ve isteği cookie , isteğin hemen başarısız olması yerine hiç olmadığı gibi ele alabilir. Bu davranışın, tüm özel durumlara izin vermek yerine CryptographicException özel olarak yakalamalı bileşenler.