Patient-authorized EHR integration
Oracle Health FHIR integration: discovery, authorization, and tenant routing.
A developer guide to the parts of an Oracle Health connection that live outside the resource request itself.
Updated: 2026-08-25 · 10 min read
The bottom line
Oracle Health implements SMART-style OAuth and FHIR, but an application still needs to resolve the correct organization environment, use registered callbacks, request appropriate context, and validate the discovered issuer and endpoints before reading data.
Key takeaways
- Treat the FHIR base and authorization metadata as tenant-specific input.
- Keep Millennium, Soarian, sandbox, and production environments distinct.
- Validate patient context and granted scopes instead of assuming the requested set was approved.
Evidence boundary: Based on Oracle Health’s public authorization documentation and FinchNode directory and discovery implementation work.
Author: FinchNode Engineering
Resolve the organization before authorization
A patient recognizes a hospital or clinic, while an application needs a FHIR base and authorization server. The connection flow should retain the selected organization, resolve its published endpoint, and perform SMART or OIDC discovery against an allowed host before constructing the authorization request.
Validate discovered metadata
const fhirBase = new URL(selectedOrganization.fhirBaseUrl);
if (fhirBase.protocol !== 'https:') throw new Error('https_required');
assertAllowedHealthcareHost(fhirBase.hostname);
const metadataUrl = new URL('.well-known/smart-configuration', `${fhirBase}/`);
const smart = await fetchJson(metadataUrl, { timeoutMs: 8_000 });
for (const value of [smart.authorization_endpoint, smart.token_endpoint]) {
const endpoint = new URL(value);
if (endpoint.protocol !== 'https:') throw new Error('invalid_smart_metadata');
assertAllowedHealthcareHost(endpoint.hostname);
}
Bind authorization to returned context
- Use the exact registered redirect URI and client type for the environment.
- Validate one-time state and PKCE before accepting the token response.
- Record the granted scope string because it can be narrower than the request.
- Require the expected patient context before issuing patient-scoped reads.
- Validate OIDC issuer, signature, audience, expiry, and nonce when identity scopes are used.
Treat coverage as organization-specific
Directory-driven routing resolves the organization a patient recognizes to the endpoint an application needs, but discovery succeeding for one tenant says nothing about the next. Validate the issuer, endpoints, and granted scopes per organization rather than assuming uniform coverage across the family.
More FinchNode interoperability guides
Frequently asked questions
Is Oracle Health the same as Cerner for FHIR integrations?
Oracle Health includes the platform historically known as Cerner, but products and organization environments can differ. Use the endpoint and implementation guidance for the selected organization and workflow.
Does Oracle Health support SMART on FHIR?
Oracle Health documents OAuth 2.0 authorization with the SMART on FHIR profile, including registered redirect URIs and launch context.
Why is tenant discovery important?
The patient chooses an organization, and that organization determines the correct FHIR base and authorization metadata. Hard-coding one endpoint does not cover a multi-organization product.
Does a published endpoint prove production access?
No. It proves that an endpoint was published. Application approval, organization configuration, authorization, scopes, patient context, data reads, and lifecycle behavior must still be validated.