ACMP is an internal authentication credential management platform focused on HMAC-based service-to-service authentication.
It brings together:
- an administration API for managing clients, credentials, packages, audit data, and admin users
- a simple built-in web admin portal at
/admin - reusable HMAC libraries for protected services and outbound clients
- a MiniKMS service for protecting HMAC secrets and internal service-auth keys
- multiple persistence options for demo, development, and durable deployment
The current implementation targets .NET 8 and supports:
InMemoryDemoSqlServerPostgres
At a high level, ACMP lets an administrator:
- create and manage service clients
- issue, rotate, revoke, and package HMAC credentials
- manage admin users and role-based access
- store protected secret material through MiniKMS
- distribute encrypted credential packages that services and clients can load at runtime
The runtime libraries then let:
- a protected API validate inbound HMAC-signed requests
- an outbound client sign requests using a locally loaded encrypted package
The solution is built around two main runtime processes:
-
MyCompany.AuthPlatform.ApiThe main management host. It exposes the admin API, embedded identity flow, credential lifecycle operations, package issuance, audit access, and readiness endpoints. -
MyCompany.Security.MiniKmsThe internal key-management host. It protects HMAC secret material, manages HMAC master keys, manages internal JWT service-auth keys, and exposes internal readiness and key-lifecycle endpoints.
The API can use MiniKMS in two ways:
- local in-process key management for simpler development scenarios
- a separate MiniKMS process over signed internal JWT/service tokens for stronger separation of concerns
- An admin signs in to
MyCompany.AuthPlatform.Api. - The API uses the application layer to create or manage clients and HMAC credentials.
- Secret material is protected through MiniKMS before it is stored.
- The API can issue encrypted credential packages for service-side validation or client-side signing.
- The HMAC libraries load those packages at runtime and perform request signing or validation.
-
src/MyCompany.AuthPlatform.ApiRunnable API host for the admin API, local web admin portal, demo mode, embedded identity, credential issuance, rotation, revocation, audit access, and package delivery. -
src/MyCompany.Security.MiniKmsRunnable internal MiniKMS host with key lifecycle, soft-retire behavior, audit logging, persisted state, service-auth key rotation, and readiness checks.
-
samples/MyCompany.AuthPlatform.RecipientSampleMinimal recipient API that reads encrypted-file HMAC validation settings fromappsettings.json, supportsExternalRsaPublicKeyPEM private-key runtime decryption, and validates inbound ACMP HMAC requests. -
samples/MyCompany.AuthPlatform.ClientSampleMinimal outbound client that reads encrypted-file client-signing settings fromappsettings.json, supportsExternalRsaPublicKeyPEM private-key runtime decryption, and signs outbound ACMP HMAC requests withHttpClient.
-
src/MyCompany.AuthPlatform.ApplicationCore application services and business rules for clients, credentials, admin users, auditing, package issuance, and secret protection workflows. -
src/MyCompany.Shared.ContractsShared domain models, enums, and cross-project contracts.
-
src/MyCompany.AuthPlatform.PackagingEncrypted package creation and package-reading support for service-validation and client-signing package artifacts. -
src/MyCompany.AuthPlatform.HmacService-side HMAC validation library, including package-backed credential loading and ASP.NET Core middleware integration. -
src/MyCompany.AuthPlatform.Hmac.ClientClient-side HMAC signing library, including package-backed signing support and an outboundHttpClienthandler.
-
src/MyCompany.AuthPlatform.Persistence.AbstractionsRepository and unit-of-work contracts used by the application layer. -
src/MyCompany.AuthPlatform.Persistence.InMemoryIn-memory persistence provider for demo mode and lightweight local runs. -
src/MyCompany.AuthPlatform.Persistence.SqlServerSQL Server persistence provider and EF Core migrations. -
src/MyCompany.AuthPlatform.Persistence.PostgresPostgreSQL persistence provider and EF Core migrations.
src/MyCompany.Security.MiniKms.ClientShared MiniKMS contracts, remote client, internal JWT token support, and MiniKMS-managed internal JWT key-state helpers.
-
tests/MyCompany.AuthPlatform.Application.TestsApplication-layer unit tests. -
tests/MyCompany.AuthPlatform.Hmac.TestsHMAC runtime, package loader, and package-backed signing/validation tests. -
tests/MyCompany.AuthPlatform.Api.IntegrationTestsIntegration tests covering the API host, MiniKMS integration, database providers, package flows, and readiness behavior.
Demo mode is meant for demos and local exploration rather than durable deployment.
It typically uses:
Persistence:Provider = InMemoryDemo- embedded identity
- in-memory or demo-style MiniKMS persistence
See demo_mode.md.
For non-demo use, the platform is designed to run with:
- SQL Server or PostgreSQL persistence for the main API
- file, SQL Server, or PostgreSQL state for MiniKMS
- a separate MiniKMS process when remote key management is desired
See:
- sql_server_setup.md
- postgres_setup.md
- minikms_service.md
Build and test from the repository root:
dotnet build .\Acmp.sln
dotnet test .\Acmp.sln
dotnet format .\Acmp.sln --verify-no-changes --severity warnRun the main API host:
dotnet run --project .\src\MyCompany.AuthPlatform.ApiThen open:
<local-url>/admin/index.htmlfor the built-in web admin<local-url>/admin/login.htmlfor the admin sign-in page<local-url>/swaggerfor the API surface in development
Typical local URLs will look like:
https://localhost:7xxx/admin/login.htmlhttp://localhost:5xxx/admin/login.html
Default development sign-ins from appsettings.Development.json:
administrator.demo/AdministratorPass!123operator.demo/OperatorPass!123viewer.demo/ViewerPass!123
Run the MiniKMS service:
dotnet run --project .\src\MyCompany.Security.MiniKmsRun the local Docker Compose stack:
Copy-Item .\deploy\.env.example .\deploy\.env
docker compose --env-file .\deploy\.env -f .\deploy\docker-compose.yml up --build -dTagged releases (v*) now publish two main GitHub release assets:
-
acmp-api-<version>.tar.gzThe published API application artifact. -
acmp-offline-bundle-<version>.tar.gzAn offline deployment bundle that includes:- prebuilt Docker image archives for the API, MiniKMS, and PostgreSQL
- docker-compose.offline.yml
- offline environment templates
- import script and deployment runbook
Use the offline bundle when the target host should not need internet access to start the stack.
If you want to rehearse the packaging flow before creating a real tag, run the Release Dry Run GitHub Actions workflow manually. For a real publish, create and push a v* tag from main.
Run the sample recipient host:
dotnet run --project .\samples\MyCompany.AuthPlatform.RecipientSample-
how_to_use_acmp.md Practical end-to-end guide for operators, recipient services, and client services using ACMP.
-
auth_platform_requirements_baseline.md Baseline product and scope requirements.
-
auth_platform_frs.md Functional requirements specification.
-
auth_platform_ts.md Technical specification and implementation design.
-
acmp.architecture.json CALM architecture model.
-
acmp-candidate-nodes.md Narrative CALM node and flow notes.
-
identity_provider_setup.md Embedded identity and authentication setup notes.
-
minikms_service.md MiniKMS service configuration, persistence, readiness, and key-management runbook.
-
local_deployment.md Local Docker Compose deployment guide for the API, MiniKMS, and PostgreSQL stack.
-
offline_deployment.md Air-gapped/offline deployment guide using prebuilt Docker image archives and an offline compose stack.
-
release_checklist.md Short operator checklist for choosing the right release asset and validating connected or offline deployment.
-
recipient_runtime_setup.md Recipient-side encrypted package loading setup for service validation and client signing, including PEM private-key runtime configuration for
ExternalRsaPublicKey. -
hmac_service_library.md Consumer guide for
MyCompany.AuthPlatform.Hmacin a protected recipient API. -
hmac_client_library.md Consumer guide for
MyCompany.AuthPlatform.Hmac.Clientin an outbound caller. -
external_recipient_wrapping_key_design.md Draft design for cross-platform recipient-owned package decryption keys that do not rely on X.509 certificate stores.
-
README.md Sample recipient host setup and runtime notes.
-
README.md Sample outbound client setup and runtime notes.
The implemented platform is centered on HMAC and currently includes:
- client and credential lifecycle management
- HMAC secret issuance and protected persistence
- encrypted credential package issuance and runtime loading
- embedded admin identity with RBAC
- separate MiniKMS support
- MiniKMS-managed internal JWT service-auth key rotation
- SQL Server, PostgreSQL, file-based, and in-memory persistence paths where applicable
Future authentication modes such as OAuth, general JWT access-token platforms, and mTLS-focused authentication are intentionally outside the current release scope.
Planned future enhancements also include automated package refresh or a pull-based recipient update path so client and recipient runtimes can adopt replacement credential packages with less manual distribution effort.