Microsoft.Extensions.Compliance.Abstractions 9.3.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.
17
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions
14
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions
15
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
14
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
15
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
16
Microsoft.Extensions.Telemetry
Provides canonical implementations of telemetry abstractions.
17
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
13
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
14
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives.
17

Version Downloads Last updated
9.3.0 3 03/12/2025
9.2.0 3 02/22/2025
9.1.0 6 02/02/2025
9.0.0 12 11/14/2024
9.0.0-preview.9.24507.7 8 11/14/2024
9.0.0-preview.8.24460.1 8 11/14/2024
9.0.0-preview.7.24412.10 12 11/14/2024
9.0.0-preview.6.24353.1 11 11/14/2024
9.0.0-preview.5.24311.7 11 11/14/2024
9.0.0-preview.4.24271.2 21 06/01/2024
9.0.0-preview.3.24209.3 16 06/03/2024
9.0.0-preview.2.24157.4 13 06/03/2024
9.0.0-preview.1.24108.1 12 06/03/2024
8.10.0 11 11/14/2024
8.9.1 11 11/14/2024
8.9.0 11 11/04/2024
8.8.0 11 11/04/2024
8.7.0 10 11/04/2024
8.6.0 10 11/14/2024
8.5.0 19 06/03/2024
8.4.0 16 06/03/2024
8.3.0 13 06/03/2024
8.2.0 14 06/03/2024
8.1.0 16 06/03/2024
8.0.0 18 06/03/2024
8.0.0-rc.2.23510.2 14 06/03/2024
8.0.0-rc.1.23453.1 12 06/03/2024
8.0.0-preview.7.23407.5 17 06/03/2024
8.0.0-preview.6.23360.2 12 06/03/2024
8.0.0-preview.5.23308.3 13 06/03/2024
8.0.0-preview.4.23273.7 13 06/03/2024