Skip to content

Commit 7cd8277

Browse files
delete keys for wn (#33324)
* delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * delete keys for wn * Update aspnetcore/release-notes/aspnetcore-9/includes/delete_keys.md Co-authored-by: Andrew Casey <[email protected]> * delete keys for wn * delete keys for wn * delete keys for wn --------- Co-authored-by: Andrew Casey <[email protected]>
1 parent 1209f4c commit 7cd8277

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<!--
2+
[!INCLUDE[](~/release-notes/aspnetcore-9/includes/delete_keys.md)]
3+
-->
4+
5+
### Data Protection support for deleting keys
6+
7+
Prior to .NET 9, data protection keys were ___not___ deletable by design, to prevent data loss. Deleting a key renders its protected data irretrievable. Given their small size, the accumulation of these keys generally posed minimal impact. However, to accommodate extremely long-running services, we have introduced the option to delete keys. Generally, only old keys should be deleted. Only delete keys when you can accept the risk of data loss in exchange for storage savings. We recommend data protection keys should ___not___ be deleted.
8+
9+
:::code language="csharp" source="~/security/data-protection/configuration/samples/9/deleteKeys/Program.cs" :::
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net9.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
</Project>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Microsoft.AspNetCore.DataProtection.KeyManagement;
2+
3+
var services = new ServiceCollection();
4+
services.AddDataProtection();
5+
6+
var serviceProvider = services.BuildServiceProvider();
7+
8+
var keyManager = serviceProvider.GetService<IKeyManager>();
9+
10+
if (keyManager is IDeletableKeyManager deletableKeyManager)
11+
{
12+
var utcNow = DateTimeOffset.UtcNow;
13+
var yearAgo = utcNow.AddYears(-1);
14+
15+
if (!deletableKeyManager.DeleteKeys(key => key.ExpirationDate < yearAgo))
16+
{
17+
Console.WriteLine("Failed to delete keys.");
18+
}
19+
else
20+
{
21+
Console.WriteLine("Old keys deleted successfully.");
22+
}
23+
}
24+
else
25+
{
26+
Console.WriteLine("Key manager does not support deletion.");
27+
}

0 commit comments

Comments
 (0)