Open Source

Proxy Smart
Healthcare Auth,
Solved.

A stateless proxy that adds OAuth 2.0 and SMART App Launch authorization to the FHIR servers you already run. Your clinical data stays exactly where it is.

Scroll

One proxy between your apps and your clinical data.

Proxy Smart sits between SMART apps and FHIR servers and handles authentication and authorization. Requests pass through to your existing servers while the proxy manages OAuth flows and access control. PostgreSQL only stores users and configuration.

Proxy Smart architectureThe Admin UI, SMART apps and AI clients connect to Proxy Smart, which runs a WebSocket channel, the FHIR proxy, OAuth endpoints and an MCP server. The FHIR proxy forwards requests to FHIR servers and a DICOMweb PACS, and every request is validated against Keycloak, which keeps users and configuration in PostgreSQL.CLIENTSAdmin UIDASHBOARDSMART AppsPATIENT · PROVIDERAI ClientsAGENTS OVER MCPPROXY SMARTBUN · ELYSIAWebSocketLIVE EVENTSFHIR Proxy/FHIR · /DICOMWEBOAuth EndpointsSMART 2.2.0MCP ServerSTREAMABLE HTTPDATA SOURCESFHIR Servers1 CONNECTED · R4PACSORTHANC · DICOMWEBPASS-THROUGHNO PHI STOREDIDENTITYKeycloakOAUTH · SSOPostgreSQLUSERS + CONFIG ONLYTOKEN CHECKSProxy Smart architecture: clients connect to the proxy, which forwards to FHIR servers and a PACS and validates identity with Keycloak and PostgreSQL.Admin UISMART AppsAI ClientsPROXY SMARTBUN · ELYSIAWebSocketLIVE EVENTSFHIR Proxy/FHIR · /DICOMWEBOAuthSMART 2.2.0MCP ServerSTREAMABLE HTTPFHIR Servers1 CONNECTED · R4PACSORTHANC · DICOMWEBKeycloakOAUTH · SSOPostgreSQLUSERS + CONFIG ONLYDATA SOURCESIDENTITY
Client requestsClinical data, passed throughIdentity and tokens
  • A FHIR serverHAPI FHIR, Microsoft FHIR Server, AWS HealthLake, or any R4 / R4B endpoint
  • Your SMART appsPatient, provider and backend service launches
  • KeycloakIncluded in the Docker setup, so there is nothing extra to install
  • SMART App Launch 2.2.0 flowsEHR and standalone launch, PKCE, launch context
  • OAuth 2.0 authorization and token managementJWT validation, refresh token rotation, enterprise SSO via SAML 2.0 and OIDC
  • Scope-based access control and FHIR proxyingEvery request checked, then forwarded to the right server

4 checks on every request, before it reaches your data.

Every FHIR proxy request runs through a layered security pipeline. Each layer can be tuned on its own, so you can roll out a stricter policy in audit mode first and switch it to enforce once the logs look clean.

  1. Request
  2. 01
    JWT Validation

    Verifies the token's signature, expiry and issuer.

    Always on
  3. 02
    Consent + IAL

    Enforces patient consent policies and the required identity assurance level. Off until you enable it.

    CONSENT_ENABLED + CONSENT_MODE
  4. 03
    SMART Scopes

    The token's scope must permit the resource type and operation, in SMART v1 or v2 syntax.

    SCOPE_ENFORCEMENT_MODE
  5. 04
    Role-Based Filtering

    Narrows results by fhirUser: patients see their own data, practitioners their assigned patients.

    ROLE_BASED_FILTERING_MODE
  6. FHIR Server
enforceBlocks the request with HTTP 403.
audit-onlyLogs the violation and lets the request through.
disabledSkips the check entirely.

Consent, scope enforcement and role-based filtering each run in one of these modes. The highlighted mode is the default; change it through the environment or at runtime from the admin API. Configuration reference

Register, manage, and launch SMART on FHIR apps through a single admin interface. Every app gets OAuth 2.0 + PKCE, scope-based access control, and FHIR server routing out of the box.

Browse the App Store →
4 apps live on api.proxy-smart.com

The hardest part of building a healthcare app is the authentication, authorization and interoperability around the clinical logic. We handle that part.

Scales with Keycloak, adds no bottleneck of its own.

The proxy layer is stateless, so it scales out horizontally and inherits Keycloak's proven high-availability setup. These are Keycloak's official benchmark figures.

30,000,000users, max tested
1,000,000 regularly
  • Token refreshes20,000/s
  • Client credential grants2,000/s
  • Password logins1,000/s
6 Keycloak pods across 3 availability zones, each with 40 VCPU · 8 GB, behind the stateless Proxy Smart layer and backed by Aurora PostgreSQL multi-AZ.Proxy Smart STATELESS · HORIZONTALAZ 1Keycloak40 VCPU · 8 GBKeycloak40 VCPU · 8 GBAZ 2Keycloak40 VCPU · 8 GBKeycloak40 VCPU · 8 GBAZ 3Keycloak40 VCPU · 8 GBKeycloak40 VCPU · 8 GBAurora PostgreSQL MULTI-AZ
1,000 logins and 20,000 token refreshes per second across 6 pods. CPU usage scales linearly with request count.
15 logins/sper vCPU, password grant
120 grants/sper vCPU, client credentials
120 refreshes/sper vCPU, refresh token
1,250 MBbase memory per Keycloak pod, caching 10,000 sessions

Sources: Keycloak benchmarks · CPU and memory sizing

From clone to a running stack in 4 commands.

The dev stack brings up Keycloak, PostgreSQL, Orthanc and the backend. Requires Bun 1.0 or later and Docker.

$ git clone https://github.com/proxy-smart/proxy-smart.git
$ cd proxy-smart
$ bun install
$ bun run docker:dev

# or run the backend locally against that stack
$ bun run dev

# production, separate containers
$ bun run docker:prod
ServiceURL
Backend APIhttp://localhost:8445
Admin UIhttp://localhost:8445/webapp/
Keycloakhttp://localhost:8080
Orthanc (DICOMweb)http://localhost:8042

Until you register your own FHIR server in the admin UI, the dev stack talks to the public test servers hapi.fhir.org and server.fire.ly.

Questions people ask before they deploy.

What is Proxy Smart?
A stateless proxy that sits between SMART on FHIR apps and your FHIR servers. It adds OAuth 2.0 and SMART App Launch 2.2.0 authorization to servers that do not support it natively, and manages scopes, launch context and access control in one place.
Does Proxy Smart store clinical data?
No. FHIR requests pass through to your existing servers and the proxy keeps none of the responses. PostgreSQL only holds Keycloak's users and configuration, which keeps the attack surface small and simplifies HIPAA and GDPR compliance.
Which FHIR servers does it work with?
Any FHIR R4 or R4B server, for example HAPI FHIR, Microsoft FHIR Server or AWS HealthLake. Register as many as you need in the admin UI; each one gets its own SMART configuration under /.well-known/smart-configuration.
How do you verify SMART App Launch compliance?
The ONC Inferno SMART App Launch suite runs in CI against every release channel. PKCE, v1 and v2 scope syntax, token introspection, backend services authorization and user-access brands are all covered; the implementation checklist tracks each requirement.
Can I enforce patient-level data isolation?
Yes. Role-based filtering narrows results by the token's fhirUser, so patients only see their own data and practitioners only their assigned patients. It starts in audit-only mode; set ROLE_BASED_FILTERING_MODE=enforce or switch it at runtime through the admin API once the audit logs look right.
Can AI agents use it?
Yes. Proxy Smart runs an MCP server over streamable HTTP at /mcp. Its tools are derived from the admin API and protected by the same OAuth flows, so an agent can only do what its token allows.
Does it cover medical imaging?
Yes. The built-in DICOMweb proxy at /dicomweb forwards QIDO-RS and WADO-RS requests to Orthanc or any other PACS. The same SMART token authorizes imaging and FHIR access, and every DICOM UID is validated before forwarding.
How do I deploy it?
With Docker Compose, as a single mono-container or as separate containers, behind a Caddy reverse proxy. AWS CDK infrastructure is included for cloud deployments. The deployment guide walks through each option.
How is Proxy Smart licensed?
It is dual licensed: AGPL-3.0 for open-source use, and a commercial license for proprietary deployments. Every running instance serves its exact source at /source, and the code lives at github.com/proxy-smart/proxy-smart.