Der TI-Flow-Fachdienst ist ein Dienst im Internet. Der Schutz vor unberechtigtem Zugriff wird nach dem Zero Trust-Paradigma durch einen Policy Enforcement Point und einen Policy Decision Point durchgesetzt. Diese Zero Trust Access (ZETA) Funktionalität für Dienste der der TI wird anwendungsübergreifend in [gemSpec_ZETA] beschrieben.
Dieses Dokument dient als Grundlage für die Abstimmung über eine technische Zugriffsrichtlinie. Ziel ist es, in verständlicher Sprache zu erläutern, welche Prüfungen durchgeführt werden, bevor ein Zugriff auf den TI-Flow-Fachdienst gewährt wird.
Die hier beschriebene Richtlinie funktioniert nach einem einfachen Prinzip: Ein Zugriff wird nur dann erlaubt, wenn alle definierten Bedingungen erfüllt sind. Scheitert eine Prüfung, wird der Zugriff verweigert und die Gründe für die Ablehnung werden protokolliert.
Im Folgenden werden die Prüfungen beschrieben, die ein anfragendes System erfolgreich durchlaufen muss.
Diese Regel stellt sicher, dass nur bestimmte Berufsgruppen oder Arten von Einrichtungen auf das System zugreifen dürfen. Technisch wird dies über eine sogenannte OID (Object Identifier) geprüft, eine eindeutige Kennung für jeden Beruf oder jede Einrichtung.
Was wird geprüft? Es wird die Berufsgruppen- bzw. Einrichtungs-OID des anfragenden Nutzers bzw. der anfragenden Institution mit einer Liste von erlaubten Kennungen abgeglichen.
Wer darf zugreifen? Folgende Berufe und Einrichtungsarten sind zugelassen:
| Akteur | OID(s) |
|---|---|
| Versicherter | 1.2.276.0.76.4.49 |
| Betriebsstätte Arzt | 1.2.276.0.76.4.50 |
| Zahnarztpraxis | 1.2.276.0.76.4.51 |
| Betriebsstätte Psychotherapeut | 1.2.276.0.76.4.52 |
| Krankenhaus | 1.2.276.0.76.4.53 |
| Öffentliche Apotheke | 1.2.276.0.76.4.54 |
| Krankenhausapotheke | 1.2.276.0.76.4.55 |
| Institution Vorsorge/Reha | 1.2.276.0.76.4.56 |
| Kostenträger | 1.2.276.0.76.4.59 |
| NCPeH-Fachdienst | 1.2.276.0.76.4.292 |
Diese Regel verifiziert, dass das anfragende Clientsystem in der genutzten Version für den Zugriff bei der gematik registriert sind. Jede Software, die auf das System zugreifen möchte, identifiziert sich mit einer Produktkennung (product_id) und einer Versionsnummer (product_version).
Was wird geprüft? Es wird geprüft, ob die Kombination aus Produkt und Version in einer Liste der erlaubten Software-Versionen enthalten ist.
Beispiel:
Eine Anfrage von Produkt A in Version 1.2 wäre erfolgreich, eine Anfrage von Produkt A in Version 1.1 würde jedoch scheitern.
Diese Regel stellt sicher, dass die anfragende Anwendung nur die Berechtigungen anfordert, die ihr auch gewährt werden dürfen. Anwendungen können bestimmte “Scopes” anfordern, die ihnen Lese- oder Schreibzugriff auf bestimmte Datenbereiche gewähren.
Was wird geprüft? Es wird die Liste der von der Anwendung angeforderten Berechtigungen mit der Liste der maximal erlaubten Berechtigungen abgeglichen. Die Anfrage ist nur dann erfolgreich, wenn alle angeforderten Berechtigungen in der Liste der erlaubten Berechtigungen enthalten sind.
Beispiel:
task.readtask.read -> Erfolg/erezept -> Fehler (da /erezept nicht erlaubt ist)Die Verbindungen von Akteuren und Use Cases erzeugen die folgende Scope Definition. Sie ist unter Referenzen aufgeführt.
Diese Regel kontrolliert, auf welche Zielsysteme oder Datenbereiche (“Audiences”) zugegriffen werden darf. Dies ist eine zusätzliche Sicherheitsebene, um sicherzustellen, dass ein Zugriffstoken nur für den vorgesehenen Zweck verwendet wird.
Was wird geprüft? Es wird abgeglichen, ob die von der Anwendung angefragten Ziel-Ressourcen in der Liste der erlaubten Ressourcen enthalten sind. Ähnlich wie bei den Berechtigungen müssen alle angefragten “Audiences” erlaubt sein.
Beispiel:
rx/Taskrx/Task -> Erfolg/eRezept -> Fehler (da eRezept unbekannt und somit nicht erlaubt ist)Wenn alle Prüfungen erfolgreich sind, erhält die Anwendung zeitlich begrenzte “Token” für den Zugriff. Die Gültigkeitsdauer (Time-To-Live, TTL) ist aus Sicherheitsgründen bewusst kurz gewählt.
Es gibt zwei Arten von Token:
Nutzung ZETA-Client durch Clientsystme
policies:
# ── Arzneimittel ─────────────────────────────────────────────────────────────
"tif-rx-task-prescribe": {
"description": "E-Rezept verordnen",
"roles": [
{ "oid": "1.2.276.0.76.4.50", "description": "oid_praxis_arzt" },
{ "oid": "1.2.276.0.76.4.51", "description": "oid_zahnarztpraxis" },
{ "oid": "1.2.276.0.76.4.52", "description": "oid_praxis_psychotherapeut" },
{ "oid": "1.2.276.0.76.4.53", "description": "oid_krankenhaus" },
{ "oid": "1.2.276.0.76.4.56", "description": "oid_institution-vorsorge-reha" }
],
"rules": [
{ "method": "POST", "path": "rx/Task/$create" },
{ "method": "POST", "path": "rx/Task/{id}/$activate" },
{ "method": "POST", "path": "rx/Task/{id}/$abort" }
]
}
"tif-rx-task-dispense": {
"description": "E-Rezept einlösen",
"roles": [
{ "oid": "1.2.276.0.76.4.54", "description": "oid_oeffentliche_apotheke" },
{ "oid": "1.2.276.0.76.4.55", "description": "oid_krankenhausapotheke" }
],
"rules": [
{ "method": "POST", "path": "rx/Task/$accept" },
{ "method": "POST", "path": "rx/Task/{id}/$reject" },
{ "method": "POST", "path": "rx/Task/{id}/$close" },
{ "method": "POST", "path": "rx/Task/{id}/$abort" },
{ "method": "GET", "path": "rx/Task/" },
{ "method": "GET", "path": "rx/Task/{id}" }
]
}
"tif-rx-task-manage": {
"description": "E-Rezepte verwalten",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" }
],
"rules": [
{ "method": "GET", "path": "rx/Task/" },
{ "method": "GET", "path": "rx/Task/{id}" },
{ "method": "POST", "path": "rx/Task/{id}/$abort" },
{ "method": "PATCH", "path": "rx/Task/{id}" },
{ "method": "GET", "path": "rx/medicationdispense/" },
{ "method": "GET", "path": "rx/medicationdispense/{id}" }
]
}
"tif-rx-task-ePeDA": {
"description": "E-Rezepte in EU einlösen",
"roles": [
{ "oid": "1.2.276.0.76.4.292", "description": "oid_ncpeh" }
],
"rules": [
{ "method": "POST", "path": "rx/$get-eu-prescriptions" },
{ "method": "POST", "path": "rx/Task/{id}/$eu-close" }
]
}
"tif-rx-communication": {
"description": "Nachrichten zu E-Rezepten zwischen Versichertem und Apotheke",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" },
{ "oid": "1.2.276.0.76.4.54", "description": "oid_oeffentliche_apotheke" },
{ "oid": "1.2.276.0.76.4.55", "description": "oid_krankenhausapotheke" }
],
"rules": [
{ "method": "POST", "path": "/rx/Communication" },
{ "method": "GET", "path": "/rx/Communication" },
{ "method": "GET", "path": "/rx/Communication/{id}" },
{ "method": "DELETE", "path": "/rx/Communication/{id}" }
]
}
"tif-rx-chargeitem-manage": {
"description": "Abrechnungsinformationen verwalten",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" }
],
"rules": [
{ "method": "GET", "path": "rx/ChargeItem/" },
{ "method": "GET", "path": "rx/ChargeItem/{id}" },
{ "method": "PATCH", "path": "rx/ChargeItem/{id}" },
{ "method": "DELETE", "path": "rx/ChargeItem/{id}" }
]
}
"tif-rx-chargeitem_provide": {
"description": "Abrechnungsinformationen bereitstellen",
"roles": [
{ "oid": "1.2.276.0.76.4.54", "description": "oid_oeffentliche_apotheke" },
{ "oid": "1.2.276.0.76.4.55", "description": "oid_krankenhausapotheke" }
],
"rules": [
{ "method": "GET", "path": "rx/ChargeItem/{id}" },
{ "method": "POST", "path": "rx/ChargeItem" },
{ "method": "PUT", "path": "rx/ChargeItem/{id}" }
]
}
"tif-rx-consent-manage": {
"description": "Einwilligung verwalten",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" }
],
"rules": [
{ "method": "GET", "path": "rx/Consent/" },
{ "method": "POST", "path": "rx/Consent/" },
{ "method": "DELETE", "path": "rx/Consent/" }
]
}
"tif-rx-eu-access-manage": {
"description": "EU-Berechtigung verwalten",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" }
],
"rules": [
{ "method": "GET", "path": "rx/$read-eu-access-permission" },
{ "method": "POST", "path": "rx/$grant-eu-access-permission" },
{ "method": "DELETE", "path": "rx/$revoke-eu-access-permission" }
]
}
"tif-rx-audit": {
"description": "Zugriffsprotokoll abrufen",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" }
],
"rules": [
{ "method": "GET", "path": "rx/AuditEvent" },
{ "method": "GET", "path": "rx/AuditEvent/{id}" }
]
}
"tif-rx-notification": {
"description": "App Notification verwalten",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" }
],
"rules": [
{ "method": "GET", "path": "rx/pushers" },
{ "method": "POST", "path": "rx/pushers/set" },
{ "method": "GET", "path": "rx/channels" },
{ "method": "POST", "path": "rx/channels/{pushkey}" }
]
}
"tif-rx-subscription": {
"description": "Benachrichtigungen registrieren",
"roles": [
{ "oid": "1.2.276.0.76.4.54", "description": "oid_oeffentliche_apotheke" },
{ "oid": "1.2.276.0.76.4.55", "description": "oid_krankenhausapotheke" }
],
"rules": [
{ "method": "POST", "path": "rx/Subscription" }
]
}
# ── DiGA Verordnung ────────────────────────────────────────────────────────
"tif-diga-task-prescribe": {
"description": "DiGA Verordnung verordnen",
"roles": [
{ "oid": "1.2.276.0.76.4.50", "description": "oid_praxis_arzt" },
{ "oid": "1.2.276.0.76.4.51", "description": "oid_zahnarztpraxis" },
{ "oid": "1.2.276.0.76.4.52", "description": "oid_praxis_psychotherapeut" },
{ "oid": "1.2.276.0.76.4.53", "description": "oid_krankenhaus" },
{ "oid": "1.2.276.0.76.4.56", "description": "oid_institution-vorsorge-reha" }
],
"rules": [
{ "method": "POST", "path": "diga/Task/$create" },
{ "method": "POST", "path": "diga/Task/{id}/$activate" },
{ "method": "POST", "path": "diga/Task/{id}/$abort" }
]
}
"tif-diga-task-dispense": {
"description": "DiGA Verordnung einlösen",
"roles": [
{ "oid": "1.2.276.0.76.4.59", "description": "oid_kostentraeger" }
],
"rules": [
{ "method": "POST", "path": "diga/Task/$accept" },
{ "method": "POST", "path": "diga/Task/{id}/$reject" },
{ "method": "POST", "path": "diga/Task/{id}/$close" },
{ "method": "GET", "path": "diga/Task/{id}" }
]
}
"tif-diga-task-manage": {
"description": "DiGA Verordnungen verwalten",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" }
],
"rules": [
{ "method": "GET", "path": "diga/Task/" },
{ "method": "GET", "path": "diga/Task/{id}" },
{ "method": "POST", "path": "diga/Task/{id}/$abort" },
{ "method": "GET", "path": "diga/medicationdispense/" },
{ "method": "GET", "path": "diga/medicationdispense/{id}" }
]
}
"tif-diga-communication": {
"description": "Nachrichten zu DiGA-Verordnungen zwischen Versichertem und Kostenträger",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" },
{ "oid": "1.2.276.0.76.4.59", "description": "oid_kostentraeger" }
],
"rules": [
{ "method": "POST", "path": "/diga/Communication" },
{ "method": "GET", "path": "/diga/Communication" },
{ "method": "GET", "path": "/diga/Communication/{id}" },
{ "method": "DELETE", "path": "/diga/Communication/{id}" }
]
}
"tif-diga-audit": {
"description": "Zugriffsprotokoll abrufen",
"roles": [
{ "oid": "1.2.276.0.76.4.49", "description": "oid_versicherter" }
],
"rules": [
{ "method": "GET", "path": "diga/AuditEvent" },
{ "method": "GET", "path": "diga/AuditEvent/{id}" }
]
}
"tif-diga-subscription": {
"description": "Benachrichtigungen registrieren",
"roles": [
{ "oid": "1.2.276.0.76.4.59", "description": "oid_kostentraeger" }
],
"rules": [
{ "method": "POST", "path": "diga/Subscription" }
]
}
{
"access_token_ttl": 300,
"refresh_token_ttl": 43200,
"allowed_scopes": [
"tif-rx-task-prescribe",
"tif-rx-task-dispense",
"tif-rx-task-manage",
"tif-rx-task-ePeDA",
"tif-rx-communication",
"tif-rx-chargeitem-manage",
"tif-rx-chargeitem-provide",
"tif-rx-consent-manage",
"tif-rx-eu-access-manage",
"tif-rx-audit",
"tif-rx-notification",
"tif-rx-subscription",
"tif-diga-task-prescribe",
"tif-diga-task-dispense",
"tif-diga-task-manage",
"tif-diga-communication",
"tif-diga-audit",
"tif-diga-subscription"
]
}