ASP.NET Core의 임시 데이터 보호 공급자
애플리케이션에 일회용 IDataProtectionProvider가 필요한 시나리오가 있습니다. 예를 들어 개발자가 일회성 콘솔 애플리케이션에서 실험 중이거나 애플리케이션 자체가 일시적(스크립팅 또는 단위 테스트 프로젝트임)일 수 있습니다. 이러한 시나리오를 지원하기 위해 Microsoft.AspNetCore.DataProtection 패키지에는 EphemeralDataProtectionProvider 형식이 포함됩니다. 이 형식은 키 리포지토리가 메모리에만 저장되고 백업 저장소에 기록되지 않는 IDataProtectionProvider의 기본 구현을 제공합니다.
EphemeralDataProtectionProvider의 각 인스턴스는 고유한 마스터 키를 사용합니다. 따라서 EphemeralDataProtectionProvider에 루팅된 IDataProtector가 보호된 페이로드를 생성하는 경우 해당 페이로드는 동일한 EphemeralDataProtectionProvider 인스턴스에서 루팅된 동등한 IDataProtector(동일한 용도 체인이 지정된 경우)에 의해서만 보호되지 않을 수 있습니다.
다음 샘플에서는 EphemeralDataProtectionProvider를 인스턴스화하고 이를 사용하여 데이터를 보호 및 보호 해제하는 방법을 보여 줍니다.
using System;
using Microsoft.AspNetCore.DataProtection;
public class Program
{
public static void Main(string[] args)
{
const string purpose = "Ephemeral.App.v1";
// create an ephemeral provider and demonstrate that it can round-trip a payload
var provider = new EphemeralDataProtectionProvider();
var protector = provider.CreateProtector(purpose);
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}");
// if I create a new ephemeral provider, it won't be able to unprotect existing
// payloads, even if I specify the same purpose
provider = new EphemeralDataProtectionProvider();
protector = provider.CreateProtector(purpose);
unprotectedPayload = protector.Unprotect(protectedPayload); // THROWS
}
}
/*
* SAMPLE OUTPUT
*
* Enter input: Hello!
* Protect returned: CfDJ8AAAAAAAAAAAAAAAAAAAAA...uGoxWLjGKtm1SkNACQ
* Unprotect returned: Hello!
* << throws CryptographicException >>
*/