diff --git a/smart-app-launch/README.md b/smart-app-launch/README.md index 03583b6..bf69dea 100644 --- a/smart-app-launch/README.md +++ b/smart-app-launch/README.md @@ -1,65 +1,131 @@ -# Launch growth-chart smart app on Aidbox and auth and login via KeyCloack +# Aidbox Smart App Launch Demo +This demo showcases the Smart App EHR and Patient [launch flows](https://hl7.org/fhir/smart-app-launch/app-launch.html). +## Components -``` sh -docker compose up -``` - -aidbox - http://localhost:8080 -keycloak - http://localhost:8888 -growth-chart - http://localhost:9000 +1. [Aidbox](https://docs.aidbox.app/) TODO: Add link to Audbox smart documentation + FHIR server with SMART-on-FHIR support. +2. [Keycloak](https://www.keycloak.org/) + dentity and Access Management solution that integrates with Aidbox through the [IdentityProvider](https://docs.aidbox.app/modules/security-and-access-control/set-up-external-identity-provider) resource. +3. [Growth Chart Smart App](https://github.com/smart-on-fhir/growth-chart-app) + A SMART pediatric web application that displays patient growth charts based on their observations. +4. **Demo Launcher Page** + A web page that emulates EHR patient context selection. -## EHR launch +## Prerequisites -### Patient launch +- [Docker](https://www.docker.com/) +- Cloned repository: [Github: Aidbox/examples](https://github.com/Aidbox/examples/tree/main) +- Working directory: `smart-app-launch` -Open http://localhost:7070/launcher.html (Demo Smart APP launcher) +To clone the repository and navigate to the `smart-app-launch` directory, run: - -Need launch uri - -``` curl-config -POST /rpc - -method: aidbox.smart/get-launch-uri -params: - user: patient - iss: http://localhost:8080 - client: growth_chart - ctx: - patient: patient +``` sh +git clone git@github.com:Aidbox/examples.git && cd examples/smart-app-launch ``` -http://localhost:9000 -login using KeyCloack -username: provider -password: provider +## Step 1: Run Demo Components -### Provider launch +Start all the demo components by running: -``` curl-config -POST /rpc - -method: aidbox.smart/get-launch-uri -params: - user: provider - iss: http://localhost:8080 - client: growth_chart - ctx: - patient: patient +```sh +docker compose up ``` -## Stand alone launch - -### Patient launch - -`user.fhirUser` should be ref to Patient - -http://localhost:9000 -login using KeyCloack -username: patient -password: patient - +Wait until all components are pulled and started. The components are accessible at: + +- Aidbox - http://localhost:8080 +- Keycloak - http://localhost:8888 +- Growth Chart - http://localhost:9000 +- Demo Launcher Page - http://localhost:7070/launcher.html + + +## Step 2: Open launcher Page + +Open the [Demo Launcher Page](http://localhost:7070/launcher.html). + +- **Left Side:** A list of patients retrieved from Aidbox, simulating EHR patient context selection. + +- **Right Side:** A Patient Standalone Launch with a pre-selected patient context, simulating a launch directly from the SMART App. + +## Step 3: Perform EHR Launch + +**3.1** Select a patient from the list on the left side and click the `Launch Growth Chart App` button to start the launch process. +**3.2** On the Aidbox login screen, click the `Sign in with Keycloak` button. +**3.3** Log in to Keycloak with username `patient` and password `password` +**3.4** On the consent screen, allow all requested scopes. +**3.5** View the patient's data in the Growth Chart app. + +## Step 4: Perform Patient Standalone Launch + +**4.1** Go back to the [Demo Launcher](http://localhost:7070/launcher.html) +**4.2** On the right side of the screen, click the **Launch Growth Chart App** button under Patient Standalone Launch. +**4.2** On the consent screen, allow all requested scopes. +**4.3** View the patient's data in the Growth Chart app. + +## EHR Launch Interaction Diagram + +```mermaid +sequenceDiagram + actor Customer as User + participant EHR as EHR
(Demo Launcher) + participant Aidbox as Aidbox + participant Keycloak as Keycloak + participant Smart App as Growth Chart
(SMART App) + Note right of EHR: Communicates with Aidbox
using HTTP basic auth + Customer ->> EHR: Launch Smart App + activate EHR + EHR ->> Smart App: Launch context + deactivate EHR + activate Smart App + Smart App ->> Aidbox: Redirect to /auth/login?response_type=code&client_id.... + deactivate Smart App + activate Aidbox + Aidbox ->> Keycloak: Redirect to Keycloak Login page + deactivate Aidbox + activate Keycloak + Note right of Keycloak: Login in with keycloak creds + Keycloak ->> Aidbox: Response with code + deactivate Keycloak + activate Aidbox + Aidbox ->> Keycloak: Request to exchange code to token + deactivate Aidbox + activate Keycloak + Keycloak ->> Aidbox: Return token + deactivate Keycloak + activate Aidbox + Aidbox ->> Keycloak: Retrive user info + deactivate Aidbox + activate Keycloak + Keycloak ->> Aidbox: Return user info + deactivate Keycloak + activate Aidbox + Aidbox ->> Aidbox: Create User resource in Aidbox + Aidbox ->> Customer: Show the Grant screen + deactivate Aidbox + activate Customer + Customer ->> Aidbox: Allow requested scopes + deactivate Customer + activate Aidbox + Aidbox ->> Aidbox: Checks granted permissions + Aidbox ->> Smart App: Redirect with code + deactivate Aidbox + activate Smart App + Smart App ->> Aidbox: Request /auth/token
to exchange code to token + deactivate Smart App + activate Aidbox + Aidbox ->> Smart App: Return token + deactivate Aidbox + activate Smart App + Smart App ->> Aidbox: Request /Observation and /Patient/ with token + deactivate Smart App + activate Aidbox + Aidbox ->> Aidbox: Validate scopes from token + Aidbox ->> Smart App: Return Observations and Patient + deactivate Aidbox + activate Smart App + Smart App ->> Customer: Show patient's data + deactivate Smart App +``` -### Provider launch - not supported