Microsoft.Extensions.Compliance.Abstractions 10.4.0

Microsoft.Extensions.Compliance.Abstractions

This package introduces data classification and data redaction features.

Install the package

From the command-line:

dotnet add package Microsoft.Extensions.Compliance.Abstractions

Or directly in the C# project file:

<ItemGroup>
  <PackageReference Include="Microsoft.Extensions.Compliance.Abstractions" Version="[CURRENTVERSION]" />
</ItemGroup>

Usage Example

Data Classification

The DataClassification structure encapsulates a classification label within a specific taxonomy for your data. It allows you to mark sensitive information and enforce policies based on classifications.

  • Taxonomy Name: Identifies the classification system.
  • Value: Represents the specific label within the taxonomy.

Creating Custom Classifications

You can define custom classifications by creating static members that represent different types of sensitive data. This provides a consistent way to label and handle data across your application.

Example:

using Microsoft.Extensions.Compliance.Classification;

public static class MyTaxonomyClassifications
{
    public static string Name => "MyTaxonomy";

    public static DataClassification PrivateInformation => new DataClassification(Name, nameof(PrivateInformation));
    public static DataClassification CreditCardNumber => new DataClassification(Name, nameof(CreditCardNumber));
    public static DataClassification SocialSecurityNumber => new DataClassification(Name, nameof(SocialSecurityNumber));
}

Binding Data Classification Settings

You can bind data classification settings directly from your configuration using the options pattern. For example:

appsettings.json

{
    "Key": {
        "PhoneNumber": "MyTaxonomy:PrivateInformation",
        "ExampleDictionary": {
            "CreditCard": "MyTaxonomy:CreditCardNumber",
            "SSN": "MyTaxonomy:SocialSecurityNumber",
        }
    }
}
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;

public class TestOptions
{
    public DataClassification? PhoneNumber { get; set; }
    public IDictionary<string, DataClassification> ExampleDictionary { get; set; } = new Dictionary<string, DataClassification>();
}

class Program
{
    static void Main(string[] args)
    {
        // Build configuration from an external json file.
        IConfiguration configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();

        // Setup DI container and bind the configuration section "Key" to TestOptions.
        IServiceCollection services = new ServiceCollection();
        services.Configure<TestOptions>(configuration.GetSection("Key"));

        // Build the service provider.
        IServiceProvider serviceProvider = services.BuildServiceProvider();

        // Get the bound options.
        TestOptions options = serviceProvider.GetRequiredService<IOptions<TestOptions>>().Value;

        // Simple output demonstrating binding results.
        Console.WriteLine("Configuration bound to TestOptions:");
        Console.WriteLine($"PhoneNumber: {options.PhoneNumber}");
        foreach (var item in options.ExampleDictionary)
        {
            Console.WriteLine($"{item.Key}: {item.Value}");
        }
    }
}

Implementing Redactors

Redactors can be implemented by inheriting from Microsoft.Extensions.Compliance.Redaction.Redactor. For example:

using Microsoft.Extensions.Compliance.Redaction;

public class StarRedactor : Redactor
{
    private const string Stars = "****";

    public override int GetRedactedLength(ReadOnlySpan<char> input) => Stars.Length;

    public override int Redact(ReadOnlySpan<char> source, Span<char> destination)
    {
        Stars.CopyTo(destination);
        return Stars.Length;
    }
}

Implementing Redactor Providers

Redactor Providers implement Microsoft.Extensions.Compliance.Redaction.IRedactorProvider. For example:

using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;

public sealed class StarRedactorProvider : IRedactorProvider
{
    private static readonly StarRedactor _starRedactor = new();

    public static StarRedactorProvider Instance { get; } = new();

    public Redactor GetRedactor(DataClassificationSet classifications) => _starRedactor;
}

Feedback & Contributing

We welcome feedback and contributions in our GitHub repo.

Showing the top 20 packages that depend on Microsoft.Extensions.Compliance.Abstractions.

Packages Downloads
Microsoft.Extensions.Http.Resilience
Resilience mechanisms for HTTP Client.
108
Microsoft.Extensions.Http.Resilience
Resilience mechanisms for HTTP Client.
111
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions
94
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions
100
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions
107
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
96
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
97
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
100
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
102
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
118
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
95
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
96
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
97
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
100
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
103
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
104
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
105
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
107
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
122

Version Downloads Last updated
10.4.0 11 03/12/2026
10.3.0 19 02/13/2026
10.2.0 21 01/15/2026
10.1.0 20 12/12/2025
10.0.0 48 11/12/2025
9.10.0 64 10/15/2025
9.9.0 71 09/12/2025
9.8.0 85 08/15/2025
9.7.0 69 07/10/2025
9.6.0 73 06/14/2025
9.5.0 73 05/17/2025
9.4.0 88 04/10/2025
9.3.0 93 03/29/2025
9.2.0 99 03/29/2025
9.1.0 101 03/29/2025
9.0.0 110 03/29/2025
9.0.0-preview.9.24507.7 78 03/30/2025
9.0.0-preview.8.24460.1 105 04/01/2025
9.0.0-preview.7.24412.10 89 03/31/2025
9.0.0-preview.6.24353.1 93 04/01/2025
9.0.0-preview.5.24311.7 88 04/01/2025
9.0.0-preview.4.24271.2 104 03/30/2025
9.0.0-preview.3.24209.3 90 04/01/2025
9.0.0-preview.2.24157.4 106 04/01/2025
9.0.0-preview.1.24108.1 96 03/30/2025
8.10.0 93 03/29/2025
8.9.1 83 03/29/2025
8.9.0 115 03/29/2025
8.8.0 115 03/29/2025
8.7.0 84 03/29/2025
8.6.0 90 03/29/2025
8.5.0 90 03/29/2025
8.4.0 99 03/29/2025
8.3.0 93 03/29/2025
8.2.0 113 03/15/2025
8.1.0 101 03/29/2025
8.0.0 88 03/29/2025
8.0.0-rc.2.23510.2 105 04/01/2025
8.0.0-rc.1.23453.1 87 04/01/2025
8.0.0-preview.7.23407.5 78 03/30/2025
8.0.0-preview.6.23360.2 85 04/01/2025
8.0.0-preview.5.23308.3 100 04/01/2025
8.0.0-preview.4.23273.7 107 04/01/2025