OZO FHIR implementation guide
0.1.0 - ci-build
OZO FHIR implementation guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
The primary assumption of providing access to practitioners is that they share the same identity provider as the OZO platform does. The secondary assumption is that the application that identifies the practitioner is a health care application and is part of the OZO network as a trusted participant. As the platforms share the same source of trust, the NutsEmployeeCredential can be leveraged to pass the user identity from the healthcare provider to the OZO platform. The credentials involved in connecting practitioners are:
X509Credential, signed by the private key of a UZI certificate.NutsOrganizationCredential, matching the URA number of the X509CredentialNutsEmployeeCredential for each logged in practitioner.In order to act on behalf of a health care organization in the OZO network, a health care provider needs to identify themselves by an UZI server certificate. This certificate can be used to self-sign and issue an X509Credential. This credential is loaded in the organization wallet and is used to proof the UZI number ownership to the OZO network.
A tool on generating the UZI VC can be found at the Golang did:x509 and X509Credential Toolkit
The second stage of the onboarding is the NutsOrganizationCredential, this credential is issued by OZO in order to welcome the health care organization in the OZO network.
Explanation of the Diagram
Actors and Components
Actors:
user: Represents the end user initiating actions in the system.Controls:
client_administrator: The primary control that interacts with different components to facilitate credential issuance and storage.x509_toolkit: A control used for issuing X509 credentials.client_nuts: A control used for managing credential-related actions, such as creating subjects and storing credentials.client_app: Represents the user-facing entry point into the client system.Boundary:
ozo_administrator: An administrative boundary involved in issuing the NutsOrganizationCredential.Control (Specific to OZO):
ozo_nuts: A special control within the ozo_administrator.Workflow 1: Self-sign X509Credential
Overview:
This workflow demonstrates the process of creating, signing, and storing an X509 credential.
client_administrator sends a request to client_nuts to create a subject.client_nuts responds by sending back a did:web to the client_administrator.client_administrator uses the x509_toolkit to request issuance of a Verifiable Credential (VC), which includes:
did:webx509_toolkit returns the signed X509Credential to the client_administrator.client_administrator sends the signed X509Credential to client_nuts for storage.Workflow 2: Request NutsOrganizationCredential
Overview:
This workflow focuses on requesting, issuing, and storing the NutsOrganizationCredential.
client_administrator requests the ozo_administrator to issue a NutsOrganizationCredential, providing a URA number as input.ozo_administrator forwards this request to client_nuts to create the NutsOrganizationCredential.client_nuts returns the created credential back to the ozo_administrator.ozo_administrator sends the NutsOrganizationCredential to the client_administrator.client_administrator stores the NutsOrganizationCredential in client_nuts.The trust is between OZO and the client application scoped at both organization and Practitioner level. For each organization the following must be arranged:
X509Credential signed by the private key of the UZI server certificate.NutsOrganizationCredential linked to the X509Credential with the URA number.Practitioner in both the OZO platform and the client application.Practitioner must be known in both the client application and the OZO platform.The X509Credential and NutsOrganizationCredential reside in the wallet of the organization in the NUTS node.
The procedure of getting access to the OZO api starts with a request towards the NUTS node for an access credential. The Practitioner must be logged in to the application with the IdP of the Organization. To request an access_token, the client application needs to initiate the token request with a self-signed NutsEmployeeCredential that contains the id_token or SAML assertion of the IdP. The NUTS node starts a negotiation with the NUTS node of the OZO platform. As soon as the NUTS node of the client has presented the right Verifiable Credentials in de form of signed Verifiable Presentations, the NUTS node of OZO provides an access_token. The client application uses the access_token to access the OZO API. The OZO Api introspects the access_token and uses the information in the introspection result to apply search narrowing. Furthermore, the OZO Api must check the id_token or SAML assertion with the known IdP for the domain and must check if the URA number of the X509Credential matches the NutsOrganizationCredential
The diagram illustrates a sequence of interactions between several entities to manage login, token acquisition, and secure API usage. The interactions are grouped into three key stages: Login, Get access_token, and Use access_token.
Actors and Components
Process Breakdown
1. Login
2. Get access_token
dpop_kid (key ID) are returned to the Client App via Client NUTS.3. Use access_token
Get DPoP token
Make API Request
GET /api/messages) to OZO API. The request includes:
Authorization: DPoP access_tokenDPoP: dpop_tokenValidate access_token
access_token by forwarding it to NUTS OZO for validation.200 OK and the requested data.