The Configuration Source feature provides flexibility in how the SecureBootDashboard API loads its configuration. You can choose to load configuration from:
- appsettings.json (default, recommended for most deployments)
- Database (for advanced scenarios requiring runtime configuration changes)
This feature addresses deployments where database configuration may not be available or desired.
Add the ConfigurationSource section to your appsettings.json:
{
"ConfigurationSource": {
"Provider": "AppSettings"
}
}| Provider | Description | Use Case |
|---|---|---|
AppSettings |
Loads all configuration from appsettings.json files (default) | Standard deployments, containerized environments, immutable infrastructure |
Database |
Loads dynamic configuration from database tables | Advanced scenarios requiring runtime configuration updates without redeployment |
Default: If not specified, the system defaults to AppSettings.
When Provider is set to AppSettings, the following configuration is read exclusively from appsettings.json:
- Queue service URI and name
- Authentication method and credentials
- Processing intervals and batch sizes
- Message visibility timeout
Location: appsettings.json → QueueProcessor section
- Client certificate validation rules
- Allowed thumbprints and issuers
- Certificate chain validation options
- Revocation checking settings
Location: appsettings.json → MutualTls section
- General application configuration
- Feature flags
- Service endpoints
Location: appsettings.json → Various sections
Most deployments should use the default AppSettings provider:
{
"ConfigurationSource": {
"Provider": "AppSettings"
},
"QueueProcessor": {
"Enabled": true,
"QueueServiceUri": "https://myaccount.queue.core.windows.net",
"QueueName": "secureboot-reports",
"AuthenticationMethod": "ManagedIdentity"
},
"MutualTls": {
"Enabled": false
}
}For advanced scenarios where configuration must change at runtime without redeployment:
{
"ConfigurationSource": {
"Provider": "Database"
}
}Requirements for Database provider:
- Database must be accessible and configured
- Required tables must exist:
ApiConfiguration,MutualTlsConfig,ApplicationSettings - Configuration must be populated in these tables
- Startup: Configuration is loaded from appsettings.json files
- Runtime: Configuration is cached and does not change without application restart
- Fallback: Not applicable (primary configuration source)
- Errors: Application will fail to start if required configuration is missing from appsettings.json
- Startup: Configuration is loaded from database tables
- Runtime: Configuration is cached with 5-minute expiration (configurable)
- Fallback: If database is unavailable, falls back to appsettings.json with warnings logged
- Errors: Database connection failures are logged but do not prevent startup if fallback succeeds
If you're currently using database configuration and want to switch to appsettings.json:
-
Extract current configuration from database tables:
ApiConfiguration→QueueProcessorsectionMutualTlsConfig→MutualTlssectionApplicationSettings→ Various sections
-
Update appsettings.json with extracted values
-
Change ConfigurationSource:
{ "ConfigurationSource": { "Provider": "AppSettings" } } -
Restart the application and verify logs show:
Configuration Source: AppSettings Use Database Configuration: False Use AppSettings Configuration: True
If you need runtime configuration changes without redeployment:
-
Ensure database tables exist (run migrations if needed):
ApiConfigurationMutualTlsConfigApplicationSettingsTrustedCertificateAuthorities
-
Populate configuration in database tables
-
Change ConfigurationSource:
{ "ConfigurationSource": { "Provider": "Database" } } -
Restart the application and verify logs show:
Configuration Source: Database Use Database Configuration: True Use AppSettings Configuration: False
The application logs the configuration source at startup:
Configuration Source: AppSettings
Use Database Configuration: False
Use AppSettings Configuration: True
When using Database provider, you'll see additional logs:
Loading Queue Processor configuration from DATABASE
✓ Queue Processor configured from DATABASE: Enabled=True, Queue=secureboot-reports, ...
If database configuration fails:
✗ Failed to load Queue Processor configuration from database. Falling back to appsettings.json configuration.
Cause: ConfigurationSource is set to AppSettings but required configuration is missing from appsettings.json
Solution: Add the missing configuration sections to appsettings.json (QueueProcessor, MutualTls, etc.)
Cause: ConfigurationSource is set to Database but database is unavailable or tables don't exist
Solution:
- Check database connection string
- Verify database tables exist
- Check logs for specific database errors
- Consider falling back to
AppSettingsprovider temporarily
Cause (AppSettings): Changes to appsettings.json require application restart
Solution: Restart the application
Cause (Database): Configuration is cached for 5 minutes
Solution: Wait for cache expiration or restart application for immediate effect
- Use AppSettings for production: More reliable, easier to version control, works in containerized environments
- Use Database for edge cases: Only when runtime configuration changes are absolutely required
- Version control appsettings.json: Keep configuration in source control for auditability
- Document configuration: Comment important settings or use a separate documentation file
- Test configuration changes: Always test in non-production before deploying configuration changes
- Monitor logs: Watch startup logs to confirm correct configuration source is used
The configuration source setting does not affect API endpoints. The API continues to function normally regardless of the configuration source chosen. The setting only affects where configuration is loaded from during application startup.
- Configuration stored in files on disk
- Protect appsettings.json with appropriate file permissions
- Use Azure Key Vault or environment variables for secrets
- Never commit secrets to source control
- Configuration stored in database
- Protect database with appropriate access controls
- Encrypt connection strings
- Audit configuration changes in database
- Consider encrypting sensitive configuration fields
- v1.13: Configuration Source Options feature introduced
- Added
ConfigurationSourceOptionsclass - Updated appsettings.json with
ConfigurationSourcesection - Modified services to respect configuration source setting
- Added comprehensive tests for configuration source behavior
- Added