Implementation Guide
TIFlow - Kernfunktionalitäten
Version 2.0.0 - release

Technische Umsetzung - Zero Trust Access (ZETA)

ZETA Guard Policy Engine - Zugriffsregeln für TI-Flow

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.

Grundprinzip der Richtlinie

Die hier beschriebene Richtlinie funktioniert nach einem einfachen Prinzip: Ein Zugriff wird nur dann erlaubt, wenn alle definierten Bedingungen erfüllt sind. Scheitert auch nur eine einzige Prüfung, wird der Zugriff verweigert und die Gründe für die Ablehnung werden protokolliert.

Prüfungen

Prüfung des Berufs oder der Einrichtungsart

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.

Es wird die Berufs- bzw. Einrichtungs-OID des anfragenden Nutzers bzw. der anfragenden Institution mit einer Liste von erlaubten Kennungen abgeglichen.

Folgende Berufe und Einrichtungsarten sind zugelassen:

</tbody>
Akteur OID-Referenz OID
E-Rezepte in EU einlösen
Betriebsstätte Arzt oid_praxis_arzt 1.2.276.0.76.4.50
Zahnarztpraxis oid_zahnarztpraxis 1.2.276.0.76.4.51
Betriebsstätte Psychotherapeut oid_praxis_psychotherapeut 1.2.276.0.76.4.52
Krankenhaus oid_krankenhaus 1.2.276.0.76.4.53
Institution Vorsorge / Reha oid_institution-vorsorge-reha 1.2.276.0.76.4.257
Öffentliche Apotheke oid_oeffentliche_apotheke 1.2.276.0.76.4.54
Krankenhausapotheke oid_krankenhausapotheke 1.2.276.0.76.4.55
Kostenträger oid_kostentraeger 1.2.276.0.76.4.59
Versicherter (FdV) oid_versicherter 1.2.276.0.76.4.49
NCPeH-Fachdienst oid_ncpeh 1.2.276.0.76.4.292
Betriebsstätte gematik oid_bs_gematik 1.2.276.0.76.4.58
Prüfung der Client-Anwendung

Diese Regel verifiziert, dass die verwendete Software (das "Clientsystem") und deren Version für den Zugriff bei der gematik registriert sind. Jede Software, die auf das System zugreifen möchte, identifiziert sich mit einer Produktkennung und einer Versionsnummer.

Es wird geprüft, ob die Kombination aus Produkt und Version in einer Liste der erlaubten Software-Versionen enthalten ist.

Prüfung der angeforderten Berechtigungen (Scopes)

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.

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.

Scope Beschreibung
tif-rx-task-prescribe E-Rezept verordnen
tif-rx-task-dispense E-Rezept einlösen
tif-rx-task-manage E-Rezepte verwalten
tif-rx-task-ePeDA E-Rezept in EU einlösen
tif-rx-communication Nachrichten zu E-Rezepten
tif-rx-chargeitem-manage Abrechnungsinformationen verwalten
tif-rx-chargeitem-provide Abrechnungsinformationen bereitstellen
tif-rx-consent-manage Einwilligung verwalten
tif-rx-eu-access-manage EU-Berechtigung verwalten
tif-global Globale Schnittstellen nutzen
tif-global-subscription Benachrichtigungen registrieren
tif-rx-metadata Server Capabilities für E-Rezept abrufen
tif-rx-task-probe Probing E-Rezept
tif-diga-task-prescribe DiGA Verordnung verordnen
tif-diga-task-dispense DiGA Verordnung einlösen
tif-diga-task-manage DiGA Verordnungen verwalten
tif-diga-communication Nachrichten zu DiGA-Verordnungen
tif-diga-metadata Server Capabilities für DiGA abrufen
tif-diga-task-probe Probing DiGA
tif-audit Zugriffsprotokoll abrufen
tif-notification App Push Notification verwalten
Token-Gültigkeitsdauer (TTL)

Wenn alle Prüfungen erfolgreich sind, erhält das Clientsystem zeitlich begrenzte "Token" für den Zugriff. Die Gültigkeitsdauer (Time-To-Live, TTL) ist aus Sicherheitsgründen bewusst kurz gewählt.

Access Token: Dies ist der eigentliche "Schlüssel" für den direkten Zugriff auf Daten. Er hat eine sehr kurze Lebensdauer. Refresh Token: Wenn das Access Token abgelaufen ist, kann die Anwendung dieses zweite Token verwenden, um ein neues Access Token zu erhalten, ohne dass sich der Benutzer erneut anmelden muss. Es hat eine deutlich längere Lebensdauer.

Token TTL
Access Token 300 Sekunden (5 Minuten)
Refresh Token 43.200 Sekunden (12 Stunden)

Geltungsbereich der Scopes

Die Scopes tif-global, tif-global-subscription, tif-rx-metadata und tif-diga-metadata sowie die fachlichen Scopes für E-Rezept, DiGA, Zugriffsprotokoll und Push-Benachrichtigungen sind in dieser Seite vollständig aufgeführt. Device und Subscription sind globale Schnittstellen; die Metadata-Endpunkte sind den jeweiligen Modulen zugeordnet.

Policy-Definition

policies:

  # ── Global ─────────────────────────────────────────────────────────────

  "tif-global":
    description: "Globale Schnittstellen"
    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.257", description: "oid_institution-vorsorge-reha" }
      - { oid: "1.2.276.0.76.4.54", description: "oid_oeffentliche_apotheke" }
      - { oid: "1.2.276.0.76.4.55", description: "oid_krankenhausapotheke" }
      - { oid: "1.2.276.0.76.4.49", description: "oid_versicherter" }
      - { oid: "1.2.276.0.76.4.292", description: "oid_ncpeh" }
      - { oid: "1.2.276.0.76.4.58", description: "oid_bs_gematik" }
      - { oid: "1.2.276.0.76.4.59", description: "oid_kostentraeger" }
    rules:
      - { method: GET, path: "Device" }


  "tif-global-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" }
      - { oid: "1.2.276.0.76.4.59", description: "oid_kostentraeger" }
    rules:
      - { method: POST, path: "Subscription" }

  # ── Arzneimittel ─────────────────────────────────────────────────────────────

  "tif-rx-metadata":
    description: "Server Capabilities abrufen"
    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.257", description: "oid_institution-vorsorge-reha" }
      - { oid: "1.2.276.0.76.4.54", description: "oid_oeffentliche_apotheke" }
      - { oid: "1.2.276.0.76.4.55", description: "oid_krankenhausapotheke" }
      - { oid: "1.2.276.0.76.4.49", description: "oid_versicherter" }
      - { oid: "1.2.276.0.76.4.292", description: "oid_ncpeh" }
    rules:
      - { method: GET, path: "rx/metadata" }

  "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.257", 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}/$dispense" }
      - { 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"
    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-task-probe":
    description: "Probing E-Rezept"
    roles:
      - { oid: "1.2.276.0.76.4.58", description: "oid_bs_gematik" }
    rules:
      - { method: POST, path: "rx/Task/$create" }

  # ── DiGA Verordnung ────────────────────────────────────────────────────────

  "tif-diga-metadata":
    description: "Server Capabilities abrufen"
    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.257", description: "oid_institution-vorsorge-reha" }
      - { oid: "1.2.276.0.76.4.59", description: "oid_kostentraeger" }
      - { oid: "1.2.276.0.76.4.49", description: "oid_versicherter" }
      - { oid: "1.2.276.0.76.4.58", description: "oid_bs_gematik" }
    rules:
      - { method: GET, path: "diga/metadata" }

  "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.257", 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"
    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-task-probe":
    description: "Probing DiGA"
    roles:
      - { oid: "1.2.276.0.76.4.58", description: "oid_bs_gematik" }
    rules:
      - { method: POST, path: "diga/Task/$create" }

  # ── Zugriffsprotokoll ────────────────────────────────────────────────────────

  "tif-audit":
    description: "Zugriffsprotokoll abrufen"
    roles:
      - { oid: "1.2.276.0.76.4.49", description: "oid_versicherter" }
    rules:
      - { method: GET, path: "AuditEvent" }
      - { method: GET, path: "AuditEvent/{id}" }

  # ── Push-Notification ────────────────────────────────────────────────────────

  "tif-notification":
    description: "App Notification verwalten"
    roles:
      - { oid: "1.2.276.0.76.4.49", description: "oid_versicherter" }
    rules:
      - { method: GET,  path: "pushers" }
      - { method: POST, path: "pushers/set" }
      - { method: GET,  path: "channels" }
      - { method: POST, path: "channels/{pushkey}" }

Scope-Liste (token-config)

{
  "access_token_ttl": 300,
  "refresh_token_ttl": 43200,
  "allowed_scopes": [
    "tif-global",
    "tif-global-subscription",
    "tif-rx-metadata",
    "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-task-probe",
    "tif-diga-metadata",
    "tif-diga-task-prescribe",
    "tif-diga-task-dispense",
    "tif-diga-task-manage",
    "tif-diga-communication",
    "tif-diga-task-probe",
    "tif-audit",
    "tif-notification"
  ]
}

Weiterführende Referenzen