Skip to content

Commit 21cfef0

Browse files
committed
Proposal: PEP/PDP authorization flow
1 parent bae6ff7 commit 21cfef0

12 files changed

+101
-8
lines changed

docs/ARCHITECTURE.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ This document details the inner design of the Knooppunt.
1111

1212
![structurizr-GF_Localization_ComponentDiagram.svg](images/structurizr-GF_Localization_ComponentDiagram.svg)
1313

14+
## Authentication
15+
16+
The following diagram shows how authentication is handled in the Knooppunt.
17+
18+
![dataexchange-authorization-sd.svg](images/dataexchange-authorization-sd.svg)
19+
1420
## Handling inbound data requests
1521

1622
External data requests are authenticated and authorized by the Knooppunt.
@@ -25,4 +31,10 @@ The Knooppunt acts as Authorization Server ("AS") and Policy Decision Point ("PX
2531

2632
### Implementation
2733

28-
![structurizr-DataExchange_ComponentDiagram.svg](images/structurizr-DataExchange_ComponentDiagram.svg)
34+
![structurizr-DataExchange_ComponentDiagram.svg](images/structurizr-DataExchange_ComponentDiagram.svg)
35+
36+
### Sequence diagram
37+
38+
The following diagram shows how inbound data requests are handled:
39+
40+
![dataexchange-authorization-sd.svg](images/dataexchange-authorization-sd.svg)
File renamed without changes.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
@startuml
2+
title Data Exchange Authorization Sequence Diagrams
3+
4+
box Local XIS - Data Holder (Bronhouder)
5+
participant ehr as "EHR\n [ FHIR Server ]"
6+
participant pip as "Policy Information Point\n [ TBD ]"
7+
participant pdp as "Policy Decision Point\n[ Knooppunt ]"
8+
participant pep as "Policy Enforcement Point\n[ NGINX ]"
9+
end box
10+
box Remote XIS - Data Requester (Afnemer)
11+
participant remoteXIS as "FHIR Client/Server"
12+
end box
13+
14+
== Referral (Verwijzing), e.g. eOverdracht ==
15+
activate ehr
16+
ehr -> pip : Record resource-level consent\nPOST /Consent\n custodian, actor, provision
17+
activate pip
18+
pip --> ehr : 201 Created
19+
deactivate pip
20+
ehr -> pip : Record patient-level consent\nPOST /Consent\n custodian, actor, patient
21+
activate pip
22+
pip --> ehr : 201 Created
23+
deactivate pip
24+
ehr -> remoteXIS : Notify\nPOST Task/123
25+
activate remoteXIS
26+
remoteXIS --> ehr : 200 OK
27+
deactivate ehr
28+
29+
group Read Task
30+
remoteXIS -> pep : GET Task/123\nscope=eOverdracht-server
31+
activate pep
32+
pep -> pdp: Evaluate access request\nPOST v1/data/main
33+
note right: 'main' policy includes all use case-policies
34+
activate pdp
35+
loop Evaluate scope-mapped-policy
36+
group CapabilityStatement Policy
37+
pdp -> pdp : Evaluate
38+
activate pdp
39+
pdp -> pip : GET /CapabilityStatement\n ?url=canonical-url
40+
activate pip
41+
pip --> pdp : CapabilityStatement
42+
deactivate pip
43+
pdp -> pdp : Check FHIR operation v.s.\nCapabilityStatement
44+
pdp --> pdp : Permit/Deny
45+
deactivate
46+
end group
47+
pdp --> pep : If <i>Deny</i>,\nend evaluation
48+
group Resource-Level Policy
49+
pdp -> pdp : Evaluate
50+
activate pdp
51+
pdp -> pip : GET /Consent\n ?data=Task/123\n &custodian=URA|9876\n &actor=URA|4321
52+
activate pip
53+
pip --> pdp : 200 OK\n(Consents)
54+
deactivate pip
55+
pdp -> pdp : Verify consent\n(period, t.b.d.)
56+
pdp --> pdp : Permit/Deny
57+
deactivate
58+
end group
59+
pdp --> pep : If <i>Permit</i>,\nend evaluation
60+
group Patient-Level Policy\n(if 'patient' input parameter exists)
61+
pdp -> pdp : Evaluate
62+
activate pdp
63+
pdp -> pip : GET /Consent\n ?data=Task/123\n &custodian=URA|9876\n &actor=URA|4321
64+
activate pip
65+
pip --> pdp : 200 OK\n(Consents)
66+
deactivate pip
67+
pdp -> pdp : Verify consent\n(period, t.b.d.)
68+
pdp --> pdp : Permit/Deny
69+
deactivate
70+
end group
71+
pdp --> pep : Permit/Deny
72+
end group
73+
deactivate pdp
74+
pep --> remoteXIS : 200 OK\n(Task)
75+
deactivate
76+
end group
77+
78+
deactivate remoteXIS
79+
80+
@enduml
File renamed without changes.

docs/images/dataexchange-authorization-sd.svg

Lines changed: 1 addition & 0 deletions
Loading

docs/images/structurizr-DataExchange_ComponentDiagram.svg

Lines changed: 1 addition & 1 deletion
Loading

docs/images/structurizr-DataExchange_ContainerDiagram.svg

Lines changed: 1 addition & 1 deletion
Loading

docs/images/structurizr-GF_Addressing_ComponentDiagram.svg

Lines changed: 1 addition & 1 deletion
Loading

docs/images/structurizr-GF_Addressing_ContainerDiagram.svg

Lines changed: 1 addition & 1 deletion
Loading

docs/images/structurizr-GF_Localization_ComponentDiagram.svg

Lines changed: 1 addition & 1 deletion
Loading

0 commit comments

Comments
 (0)