This guide explains how to configure authentication for the Secure Boot Dashboard web application.
The Secure Boot Dashboard supports three authentication modes:
- None: No authentication required (development/testing only)
- Entra ID (Azure AD): Enterprise authentication using Microsoft Entra ID (formerly Azure AD)
- Windows Domain: Integrated Windows Authentication using Kerberos/NTLM
Authentication is configured in appsettings.json or via environment variables.
{
"Authentication": {
"Provider": "None"
}
}Use case: Development, testing, or internal networks where authentication is not required.
Note: This mode should NOT be used in production environments exposed to the internet.
{
"Authentication": {
"Provider": "EntraId",
"EntraId": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-client-id",
"ClientSecret": "your-client-secret",
"CallbackPath": "/signin-oidc"
}
}
}-
Register Application in Azure Portal
- Navigate to Azure Portal → Azure Active Directory → App registrations
- Click "New registration"
- Name: "Secure Boot Dashboard"
- Supported account types: Choose based on your requirements
- Redirect URI:
https://your-dashboard-url.com/signin-oidc - Click "Register"
-
Configure Application
- Copy the "Application (client) ID" → use as
ClientId - Copy the "Directory (tenant) ID" → use as
TenantId - Go to "Certificates & secrets" → "New client secret"
- Copy the secret value → use as
ClientSecret(note: store securely!)
- Copy the "Application (client) ID" → use as
-
Set Redirect URIs
- Under "Authentication" → "Platform configurations"
- Add redirect URI:
https://your-dashboard-url.com/signin-oidc - For development: also add
http://localhost:5055/signin-oidc
-
API Permissions (if needed)
- Under "API permissions"
- Add "Microsoft Graph" → "User.Read" (delegated)
-
Update Configuration
- Update
appsettings.jsonor use Azure Key Vault - For production, use environment variables or Key Vault references
- Update
{
"Authentication": {
"Provider": "EntraId",
"EntraId": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "@Microsoft.KeyVault(SecretUri=https://your-vault.vault.azure.net/secrets/TenantId)",
"ClientId": "@Microsoft.KeyVault(SecretUri=https://your-vault.vault.azure.net/secrets/ClientId)",
"ClientSecret": "@Microsoft.KeyVault(SecretUri=https://your-vault.vault.azure.net/secrets/ClientSecret)",
"CallbackPath": "/signin-oidc"
}
}
}{
"Authentication": {
"Provider": "Windows",
"Windows": {
"Enabled": true
}
}
}-
Prerequisites
- Application must be hosted on Windows Server with IIS
- Server must be joined to Active Directory domain
- Users must be on domain-joined machines
-
IIS Configuration
- Open IIS Manager
- Select your application
- Open "Authentication"
- Enable "Windows Authentication"
- Disable "Anonymous Authentication"
-
Application Configuration
- Set
Providerto "Windows" - Deploy application to IIS
- Set
-
Browser Configuration
- Internet Explorer/Edge: Automatic
- Chrome: Add site to "Local Intranet" zone
- Firefox: Set
network.automatic-ntlm-auth.trusted-urisin about:config
When authentication is enabled, users are presented with a welcome page at /Welcome that includes:
- Application branding and description
- "Accedi al Portale" (Login) button
- Feature highlights
The login page at /Account/Login displays available authentication methods based on configuration:
- Entra ID: "Accedi con Microsoft Entra ID" button
- Windows: "Accedi con Windows Domain" button
Once authenticated, the navigation bar displays:
- User's display name
- Dropdown menu with logout option
- Store
ClientSecretsecurely (Azure Key Vault recommended) - Use certificate-based authentication for production
- Enable Conditional Access policies in Azure AD
- Configure token lifetime policies as needed
- Use HTTPS in production (required for OpenID Connect)
- Ensure domain trust relationships are configured
- Use HTTPS to protect credentials in transit
- Configure service principal names (SPNs) for Kerberos
- Limit access to authorized domain groups
- Enable Extended Protection for Authentication
- Always use HTTPS in production
- Configure appropriate CORS policies
- Implement rate limiting on authentication endpoints
- Monitor authentication failures
- Keep authentication libraries up to date
"IDW10106: The 'ClientId' option must be provided"
- Verify
ClientIdis set in configuration - Check for typos in configuration key names
Redirect URI mismatch
- Ensure redirect URI in Azure portal matches your application URL
- Include both http://localhost (dev) and https://your-domain.com (prod)
Unauthorized error after login
- Check tenant ID matches your Azure AD tenant
- Verify user has access to the application
401 Unauthorized
- Verify Windows Authentication is enabled in IIS
- Check user is on domain-joined machine
- Ensure browser is configured for integrated authentication
Prompts for credentials repeatedly
- Check SPN configuration
- Verify domain trust relationships
- Check browser security zone settings
Set Provider to "None" for local development without authentication requirements.
- Use a test tenant in Azure AD
- Create test users
- Test login flow and token acquisition
- Verify logout functionality
- Test from domain-joined machine
- Test with different browsers
- Verify group membership restrictions (if configured)
You can override configuration using environment variables:
Authentication__Provider=EntraId
Authentication__EntraId__ClientId=your-client-id
Authentication__EntraId__ClientSecret=your-client-secret
Authentication__EntraId__TenantId=your-tenant-id- Microsoft Identity Platform Documentation
- ASP.NET Core Authentication Documentation
- Windows Authentication in IIS
For issues or questions:
- Check application logs in
logs/web-*.log - Review Azure AD sign-in logs (for Entra ID)
- Check IIS logs (for Windows Authentication)
- Open an issue on GitHub repository