aspnetcore/security/data-protection/using-data-protection.md
<a name="security-data-protection-getting-started"></a>
Basically, protecting data consists of the following steps:
Protect method with the data you want to protect.Unprotect method with the data you want to turn back into plain text.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 that is accessed via dependency injection. The following sample demonstrates:
When you create a protector you must provide one or more Purpose Strings. A purpose string provides isolation between consumers. 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".
[!TIP] Instances of
IDataProtectionProviderandIDataProtectorare thread-safe for multiple callers. It's intended that once a component gets a reference to anIDataProtectorvia a call toCreateProtector, it will use that reference for multiple calls toProtectandUnprotect.A call to
Unprotectwill throw CryptographicException if the protected payload cannot be verified or deciphered. 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. Components which want this behavior should specifically catch CryptographicException instead of swallowing all exceptions.
<a name="add-opt"></a>
Consider the following code which uses a service provider because the implementation of IXmlRepository has a dependency on a singleton service:
public void ConfigureServices(IServiceCollection services)
{
// ...
var sp = services.BuildServiceProvider();
services.AddDataProtection()
.AddKeyManagementOptions(o => o.XmlRepository = sp.GetService<IXmlRepository>());
}
The preceding code logs the following warning:
Calling 'BuildServiceProvider' from application code results in an additional copy of singleton services being created. Consider alternatives such as dependency injecting services as parameters to 'Configure'.
The following code provides the IXmlRepository implementation without having to build the service provider and therefore making additional copies of singleton services:
The preceding code removes the call to GetService and hides IConfigureOptions<T>.
The following code shows the custom XML repository:
The following code shows the XmlKey class: