NpgsqlDataProtection provides a PostgreSQL backend for DataProtection key storage. It
can be configured to use the default table schema or a custom schema.
- Current Version: 1.0.0
 - Target Framework: .NET 8
 
- Npgsql
 - Microsoft.AspNetCore.DataProtection.EntityFrameworkCore
 - https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Design/
 
Two extension methods are provided for IDataProtectionBuilder:
PersistKeysToPostgres(string connectionString, bool useDefaultSchema = true)PersistKeysToPostgres(string connectionString, Action<ISchemaConfigurationEditable> config = null)
In the first form, setting useDefaultSchema to false configures the storage schema to use
postgresql friendly object names. In short, table and column names will be converted to
snake case. For example, the default table "DataProtectionKeys" becomes "data_protection_keys". For more coustom configurations use the second form and pass in a custom ISchemaconfigurationEditable function.
In most cases that's all you will need to do. However, if you plan to access the key
storage outside of the normal workflow in your code, you will probably want to
configure a separate KeyStorageContext using one of the KeyStorageContext constructors.
KeyStorageContext(DbContextOptions<KeyStorageContext> options, bool useDefaultSchema = true)KeyStorageContext(DbContextOptions<KeyStroageContext> options, Action<ISchemaConfigurationEditable> config = null)
The following example shows how to use the extensions with the default schema:
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services
                .AddDataProtection()
                .PersistKeysToPostgres("YourConnectionString");
        }
    }
The package does not configure key encryption.