Reference architecture
Built from components you already run.
Cloud-neutral by design, built on Azure first. Every box is a role your platform team already operates, and your existing APIs keep deciding who may see what. Switch the view to see what it typically maps to on Azure.
- Claude
- ChatGPT
- Copilot
- Gemini
- Your customers’ own agents
- The only public endpoint
- WAF and TLS termination
- Token validation: issuer and audience
- Rate limits and kill switch per tenant
- Logs without response content
- Task-shaped capabilities
- Confirmation on writes, idempotency keys
- Stateless; workload identity, no secrets in config
- Lockkeeper auth
OAuth broker and token vault. Signs the user in via your identity provider; keeps tokens on your cloud.
- Your identity provider
The one your users already sign in with. Never replaced, only federated to.
- Audit store
Immutable, fixed retention: who asked, on whose behalf, what was called, what was decided.
- Unchanged; they keep deciding who may see what
- Called with the user’s own short-lived token
- The assistant’s token is never passed through
How a request gets through
- 1
Connect
The user adds the Lockkeeper connector in their assistant. The first call returns a 401 that points to the protected resource metadata, which names Lockkeeper’s auth service as the authorization server.
- 2
Sign in
The user signs in with their existing account: Lockkeeper auth runs the OAuth flow the assistant expects, federates to your identity provider and keeps the resulting tokens in its vault. The assistant only ever holds a token for the MCP server.
- 3
Call
Every call passes the public edge and the API gateway, then reaches the MCP server. It takes the user’s short-lived token from the vault, calls your existing API with the user’s own rights, and records who asked, on whose behalf, what was called and what was decided.
Components
Every box, what it does, and what it is on Azure.
Public edge
- The only public endpoint
- WAF and TLS termination
Front Door or Application Gateway, with WAF
API gateway
- JWT validation on issuer and audience
- Rate limits and a kill switch per tenant
- Correlation IDs; logging without response content
- Fronts the custom MCP server. Built-in REST-to-MCP conversion is not used, because capabilities are designed per customer
API Management
Lockkeeper MCP server
- Task-shaped capabilities over Streamable HTTP, stateless where possible
- Write actions only through explicit user confirmation (MCP elicitation) and idempotency keys
- Workload identity and a secret store; no secrets in configuration
AKS or Container Apps, workload identity, Key Vault
Lockkeeper auth: broker and token vault
- Runs the OAuth flow the assistant expects and federates to your identity provider; the assistant never sees your backend
- Tokens encrypted at rest with the key in your own key vault; private endpoint only
- Refresh tokens never leave the auth service; short-lived access tokens towards your APIs
- Revocation per user and per tenant
Container on AKS or Container Apps; keys in Key Vault; Azure Database for PostgreSQL on a private endpoint
Your identity provider
- The one your users already sign in with, never a new one
- OAuth 2.1, authorization code with PKCE
- Federated to by Lockkeeper auth; your identity model stays as it is
Entra ID for workforce users; Entra External ID or your existing CIAM for customers
Authorization: your apps decide
- Your APIs enforce their existing rights. Lockkeeper maps scopes, IDs and personas onto them; there is no second copy of your permissions
- Where an API only accepts a service credential, we first look at making it accept the user’s own token
- Where that is not possible, Lockkeeper enforces the rules from the system of record, and we limit that path to what is strictly needed
Your APIs as they are. For the exception only: OpenFGA on Azure Database for PostgreSQL
Audit and telemetry
- Audit records to immutable storage with a fixed retention period: who asked, on whose behalf, what was called, what was decided
- Debug telemetry through OpenTelemetry to your observability platform
- Kept apart: no gaps in the audit trail, no personal data in debug logs
Storage with an immutability policy; OpenTelemetry to Log Analytics or Datadog
Your existing APIs
- Unchanged, behind your internal gateway
- Called with the user’s own short-lived token
- The assistant’s token is never passed through
Wherever they run today
Three properties of every deployment
Private by default
Only the edge is public. The MCP server, the auth service and the audit store sit on private endpoints. Your existing APIs stay untouched behind their internal gateway.
Delivered as code
Containers and a Helm chart through GitOps, with infrastructure as code in whatever you already use: Bicep, Terraform or Crossplane. Changes arrive as pull requests; your pipeline deploys them.
Evaluated, then regression-tested
Realistic questions per assistant check that the right capability is chosen, that the assistant asks when something is ambiguous, stays out when it is not needed, and never returns data across tenants. The same suite runs after every change.
Week one
Five decisions we settle in week one of every engagement.
The questions anyone who has tried this will ask first. We bring the options; you pick.
- Identity provider
- The one your users already sign in with: your customer identity provider, or your workforce directory for internal users. Never a new one.
- Assistant clients and consent
- The MCP authorization spec expects assistants to register dynamically; most enterprise identity providers do not support that. Lockkeeper auth handles registration and the OAuth flow and federates to your provider. In week one we settle which assistant clients to allow and what your users see on the consent screen.
- Token strategy, per API
- The user’s own short-lived token wherever your API accepts one. Where an API only accepts a service credential, we first look at making it accept the user’s own token.
- The exception path
- Where an API only accepts a service credential and cannot be made to accept the user’s own token, Lockkeeper enforces the rules from your system of record, kept current by a sync, and we limit that path to what is strictly needed. A stale relationship is a data leak, so this stays the exception.
- Data reaching the assistant provider
- What a capability returns ends up in the context of the assistant your customer uses, outside your cloud and ours. Data minimization in capability design is the main control, together with your own data processing agreement with the assistant provider. We put this on the table with your DPO in week one.
Next step
Want this in your subscription?
A 30-minute whiteboard session with the person who designs and builds it. Bring your API owner and your security lead.