Questa pagina descrive come utilizzare lo standard SMART (Substitutable Medical Applications, Reusable Technologies) on FHIR v1.1.0 per accedere ai dati nei datastore FHIR nell'API Cloud Healthcare.
Panoramica
SMART on FHIR è uno standard di dati che consente alle applicazioni di accedere alle informazioni nei sistemi di cartelle cliniche elettroniche (EHR). Uno sviluppatore di applicazioni può scrivere una singola applicazione che si connette a qualsiasi sistema di EPR che ha adottato lo standard.
Ad esempio, se hai dati dei pazienti archiviati in un archivio FHIR nell'API Cloud Healthcare, puoi sviluppare un'applicazione che:
- Esegue l'autenticazione nell'archivio FHIR.
- Recupera i dati del paziente.
- Mostra i dati del paziente in un'interfaccia utente.
SMART on FHIR supporta i modelli di autorizzazione OpenID e OAuth 2.0 per l'autorizzazione e l'autenticazione.
Framework di lancio di app SMART, ambiti e contesto di lancio
L'API Cloud Healthcare supporta il framework di lancio delle app SMART, gli ambiti e il contesto di lancio come segue:
- SMART App Launch Framework
L'API Cloud Healthcare supporta la sequenza di lancio autonoma del framework di lancio delle app SMART.
Un'app può essere avviata da un sistema EHR esistente o da una sessione del portale per i pazienti, entrambi chiamati "avvio EHR", oppure come app autonoma.
- Ambiti
Gli ambiti dei dati clinici definiscono le autorizzazioni di lettura e scrittura per l'accesso a livello di utente e per dati specifici del paziente. L'API Cloud Healthcare supporta i seguenti ambiti dei dati definiti in Ambiti per la richiesta di dati clinici:
patient
user
system
- Contesto di lancio
Descrive il paziente, l'incontro o un altro contesto corrente in cui viene effettuata la richiesta. L'API Cloud Healthcare supporta il contesto di lancio del paziente da Ampi dello spazio per la richiesta di dati di contesto.
Configura il server di autorizzazione per SMART on FHIR
L'API Cloud Healthcare fornisce il supporto integrato per l'applicazione dell'accesso a SMART su FHIR in base agli ambiti di autorizzazione SMART e al contesto del paziente inseriti. Gli amministratori degli archivi FHIR creano e configurano un server di autorizzazione esterno all'API Cloud Healthcare che concede ambiti di autorizzazione SMART e contesto del paziente.
Se un'applicazione client ottiene un token di accesso che rappresenta gli scopi di autorizzazione SMART e il contesto del paziente concessi, l'API Cloud Healthcare non specifica quale flusso di lavoro di lancio l'applicazione client deve utilizzare con il server di autorizzazione esterno.
Impostare e convalidare gli ambiti di autorizzazione SMART
Se utilizzi SMARTProxy, puoi saltare questa sezione. SMARTProxy imposta e convalida automaticamente gli ambiti di autorizzazione SMART.
Gli ambiti di autorizzazione SMART utilizzano il seguente formato:
( 'patient' | 'user' | 'system') '/' ( resourceType | '*' ) '.' ( 'read' | 'write' | '*' )
Gli ambiti di autorizzazione SMART e i contesti dei pazienti vengono trasmessi all'API Cloud Healthcare utilizzando le intestazioni HTTP X-Authorization-
. L'API Cloud Healthcare utilizza queste intestazioni per applicare controllo dell'accesso ai dati negli archivi FHIR.
Il server di autorizzazione concede gli ambiti di autorizzazione SMART e il contesto del paziente e li codifica in un token di accesso. Il proxy legge quindi le informazioni nel token di accesso e le passa alle intestazioni delle richieste FHIR.
Se non disponi di un server di autorizzazione, puoi utilizzare l'acceleratore di interoperabilità basato su Apigee HealthAPIx su Apigee.
Utilizza le seguenti intestazioni HTTP di SMART on FHIR quando invii richieste dal proxy. L'applicazione client non deve impostare queste intestazioni perché vengono solo comunicate dal proxy all'API Cloud Healthcare.
X-Authorization-Scope
: uno o più ambiti di autorizzazione che utilizzano i formati standard degli ambiti di autorizzazione SMART. Ad esempio, impostare l'ambito di autorizzazione suuser/Observation.read
significa che una richiesta può leggere solo una risorsa Observation. L'API Cloud Healthcare applica questo controllo dell'accesso.X-Authorization-Patient
: il contesto del paziente della richiesta. Quando imposti questa intestazione, tutti i tipi di risorse nella richiesta idonei a essere in un alloggiamento del paziente devono appartenere all'alloggiamento del paziente dell'ID paziente fornito. L'API Cloud Healthcare applica questo controllo dell'accesso.X-Authorization-Subject
: un identificatore per l'utente finale che accede all'applicazione client di SMART su FHIR. L'API Cloud Healthcare registra l'oggetto negli audit log.X-Authorization-Issuer
: l'emittente del token di accesso SMART. L'API Cloud Healthcare registra l'emittente negli audit log.
Configura i token di accesso del server di autorizzazione
Per emettere un token JWT, devi configurare un server di autorizzazione. Il token JWT contiene gli ambiti di autorizzazione SMART e, facoltativamente, il contesto del paziente. L'API Cloud Healthcare non ha requisiti specifici per la modalità di conio del token JWT SMART da parte del server di autorizzazione. Ad esempio, la tua applicazione potrebbe essere registrata per un sottoinsieme di ambiti oppure potrebbe presentare un widget di selezione del paziente per impostare il contesto del paziente.
Se non disponi di un server di autorizzazione che configura i token JWT SMART, puoi utilizzare l'acceleratore di interoperabilità basato su Apigee HealthAPIx su Apigee per configurare un server di autenticazione che firmi i token JWT.
Token di accesso di esempio
L'esempio seguente mostra un token di accesso codificato in base64:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJzbWFydC50b2tlbi5vcmciLCJpYXQiOjE2MTI4ODQwODUsImV4cCI6MTY0NDQyMDA4NSwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoiZG9jdG9yLmpvZUBleGFtcGxlLmNvbSIsInNjb3BlIjoidXNlci9QcmFjdGl0aW9uZXIucmVhZCBwYXRpZW50LyouKiIsInBhdGllbnQiOiJwYXRpZW50MTIzIn0.lC0ouNuXNcj7FxQ83NU_MInULWo0wvyiNuaMt2RbFzBOnnMP_IXJdCeNnw3SQzUV
Dopo la decodifica, il token di accesso contiene il seguente payload:
{
"iss": "smart.token.org",
"iat": 1612884085,
"exp": 1644420085,
"aud": "www.example.com",
"sub": "doctor.gabriela@example.com",
"scope": "user/Practitioner.read patient/*.*",
"patient": "patient123"
}
Configurare SMART su FHIR nell'API Cloud Healthcare
Questa sezione descrive i passaggi da seguire per iniziare a utilizzare SMART on FHIR con i dati nell'API Cloud Healthcare.
Configurare SMARTProxy
Se utilizzi il tuo server di autorizzazione anziché SMARTProxy, salta questa sezione e vai a Configurare un account di servizio Google Cloud.
SMARTProxy è un proxy open source di Google che offre le seguenti funzionalità:
- Consente all'API Cloud Healthcare di accettare e convalidare i token di accesso SMART.
- Consente all'implementazione di FHIR nell'API Cloud Healthcare di includere i token di accesso SMART come parte del modello di gestione e autorizzazione dell'API.
Quando effettui una richiesta per recuperare i dati dall'API Cloud Healthcare tramite SMARTProxy, la richiesta segue questi passaggi:
- SMARTProxy accetta una richiesta contenente un token SMART da un client.
- SMARTProxy convalida il token SMART tramite il server di autorizzazione JWT.
- SMARTProxy legge gli ambiti e il contesto del paziente dal token SMART e li passa all'API Cloud Healthcare utilizzando quattro intestazioni HTTP.
- L'API Cloud Healthcare riceve le intestazioni e le convalida per applicare controllo dell'accesso alla richiesta. L'API Cloud Healthcare poi restituisce una risposta tramite SMARTProxy al client.
Configurare un account di servizio Google Cloud
Un proxy può avere un solo account di servizio Google Cloud. Se più client utilizzano lo stesso proxy, devono utilizzare lo stesso account servizio. Presta attenzione quando condividi un account di servizio con più client per i seguenti motivi:
- Per leggere i dati FHIR nell'API Cloud Healthcare, l'account di servizio deve disporre di autorizzazioni di lettura e scrittura ampie.
L'indirizzo email principale dei log di controllo di Cloud è associato all'account di servizio.
Ad esempio, se chiami l'API Cloud Healthcare utilizzando il tuo Account Google per l'autenticazione, Cloud Audit Logs registra il tuo indirizzo email come indirizzo email principale. Quando utilizzi un proxy per chiamare l'API Cloud Healthcare, il proxy utilizza il proprio account di servizio e l'indirizzo email dell'account di servizio è l'indirizzo email principale, pertanto l'utente chiamante originale viene oscurato. Per salvare l'utente finale nei metadati del log di controllo, passa l'indirizzo email dell'utente finale nel campo
sub
del token JWT.
Configurare un datastore FHIR
Non è necessario configurare l'archivio FHIR contenente i dati FHIR a cui accedi.
Effettuare richieste SMART su FHIR
Questa sezione fornisce una panoramica dei metodi SMART su FHIR supportati nell'API Cloud Healthcare e su come viene applicato l'accesso alle risorse quando viene effettuata una richiesta SMART su FHIR.
Quando effettui una richiesta, il tuo server di autorizzazione è responsabile della generazione di token di accesso con l'ambito di autorizzazione e il contesto di lancio SMART pertinenti.
Metodi supportati
L'API Cloud Healthcare supporta SMART su FHIR per tutti i metodi projects.locations.datasets.fhirStores.fhir
, ad eccezione dei seguenti:
Applicazione dell'accesso alle risorse
Quando viene effettuata una richiesta SMART on FHIR a un archivio FHIR, controllo dell'accesso avviene nel seguente ordine:
- L'API Cloud Healthcare controlla le autorizzazioni dell'account di servizio Google Cloud configurato nel proxy. Se l'account di servizio dispone delle autorizzazioni IAM corrette per il datastore FHIR, la richiesta viene eseguita.
- L'API Cloud Healthcare verifica se il token SMART dispone delle autorizzazioni appropriate per accedere a ogni risorsa FHIR richiesta dalla richiesta.
Il comparto del paziente è fondamentale per la logica di applicazione dell'accesso nell'API Cloud Healthcare. SMART on FHIR contiene un elenco di tipi di risorse FHIR idonei per essere inclusi in un comparto del paziente. I tipi di risorse hanno anche i propri criteri di inclusione. Nel resto di questa sezione, i tipi di risorse idonee sono chiamati "tipi di risorse idonee per il comparto dei pazienti". I tipi di risorse non idonee sono chiamati "tipi di risorse non idonee per il comparto dei pazienti".
Le richieste SMART on FHIR a un archivio FHIR devono soddisfare i seguenti requisiti:
Fornisci il ruolo
patient
,user
osystem
negli scopi di autorizzazione SMART. Se fornisci il ruolopatient
, devi fornire un contesto del paziente. Il contesto del paziente è un ID logico della risorsa Patient. La risorsa Patient deve già esistere nell'archivio FHIR o essere creata dopo l'invio della richiesta, altrimenti l'API Cloud Healthcare la rifiuta.Quando crei, leggi, aggiorni o elimini una risorsa,
resourceType
e il tipo di operazione (read
owrite
) devono corrispondere, altrimenti l'API Cloud Healthcare rifiuta la richiesta.Se fornisci un ambito
patient
contenente tipi di risorse non idonee per il comparto dei pazienti, ad esempiopatient/Practitioner.*
, il controllo di convalida dell'ambito non va a buon fine e l'API Cloud Healthcare lo rifiuta.Puoi impostare tutti i tipi di risorse con l'ambito
user
. Se è presente un contesto del paziente con un ambitouser
, i tipi di risorse idonee per il comparto del paziente sono limitati al contesto del paziente. I tipi di risorse rimanenti ignorano il contesto del paziente.La presenza di un contesto paziente limita i tipi di risorse idonee per il comparto del paziente al paziente in questione. Ad esempio, una risorsa Observation deve avere il
subject
campo che fa riferimento alla risorsa Patient specificata affinché l'osservazione sia accessibile. Consulta i tipi di accesso all'alloggiamento del paziente in Resource CompartmentDefinition - Content per un elenco dei campi in ogni tipo di risorsa dell'alloggiamento del paziente a cui deve essere fatto riferimento al paziente specificato affinché la risorsa sia considerata all'interno dell'alloggiamento del paziente.Le richieste possono contenere sia gli ambiti
patient
siauser
.Non utilizzare l'ambito
system
con il contesto del paziente, altrimenti la richiesta non va a buon fine.Non utilizzare l'ambito
system
con l'ambitopatient
ouser
.Se chiami un metodo che accede a più risorse (ad esempio il metodo
fhir.Patient-everything
,fhir.executeBundle
ofhir.search
), il controllo dell'accesso si applica a ogni singola risorsa.