Microsoft.Extensions.Compliance.Abstractions 9.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.

No packages depend on Microsoft.Extensions.Compliance.Abstractions.

Version Downloads Last updated
9.4.0 1 04/26/2025
9.3.0 0 03/11/2025
9.2.0 0 02/11/2025
9.1.0 0 01/14/2025
9.0.0 0 11/12/2024
9.0.0-preview.9.24507.7 0 10/08/2024
9.0.0-preview.8.24460.1 0 09/10/2024
9.0.0-preview.7.24412.10 0 08/14/2024
9.0.0-preview.6.24353.1 0 07/10/2024
9.0.0-preview.5.24311.7 0 06/11/2024
9.0.0-preview.4.24271.2 0 05/21/2024
9.0.0-preview.3.24209.3 0 04/11/2024
9.0.0-preview.2.24157.4 0 03/12/2024
9.0.0-preview.1.24108.1 0 02/13/2024
8.10.0 0 10/08/2024
8.9.1 0 09/06/2024
8.9.0 0 09/05/2024
8.8.0 0 08/13/2024
8.7.0 0 07/10/2024
8.6.0 0 06/11/2024
8.5.0 0 05/14/2024
8.4.0 0 04/09/2024
8.3.0 0 03/12/2024
8.2.0 0 02/13/2024
8.1.0 0 01/09/2024
8.0.0 0 11/14/2023
8.0.0-rc.2.23510.2 0 10/10/2023
8.0.0-rc.1.23453.1 0 09/12/2023
8.0.0-preview.7.23407.5 0 08/08/2023
8.0.0-preview.6.23360.2 0 07/12/2023
8.0.0-preview.5.23308.3 0 06/14/2023
8.0.0-preview.4.23273.7 0 05/23/2023