Giter VIP home page Giter VIP logo

api-vzd's Introduction

Verzeichnisdienst der Telematikinfrastruktur

gem Spec VZD v1.14 gemILF Pflege VZD v1.5 simplifier.net 0.10
Admin API 1.9 Application Maintenance API 1.2

Aktuelles

GitHub Branches

Der Verzeichnisdienst wird auf verschiedenen GitHub Branches dokumentiert:

  • main Branch: Enthält die Dokumentation passend für die aktuelle Verzeichnisdienst Produktivumgebung (PU)

  • develop Branch: Enthält die Dokumentation passend für den aktuelle in Entwicklung befindlichen Verzeichnisdienst.

  • feature/* Branches: Diese Branches werden zur Vorbereitung und Diskussion von neuen Themen genutzt, die noch nicht in Entwickung sind. Diese Dokumente können unvollständig sein und sich bis zur Fertigstellung ändern.

Kontextabgrenzung

VZD Systemkontext
Figure 1. Verzeichnisdienst Systemkontext


Verzeichnisdienst der TI verwaltet Einträge von Leistungserbringern und Organisationen/Institutionen mit allen definierten Attributen, die in das Verzeichnis aufgenommen werden sollen. Anhand einer Suchanfrage können diese Daten abgefragt werden (z. B. Adressdaten, X.509-Zertifikate). Ferner können Einträge des Verzeichnisses durch Kartenherausgeber (Basisdaten) oder berechtigte fachanwendungsspezifische Dienste (Fachanwendungsdaten) geändert, hinzugefügt und gelöscht (Kartenherausgeber vollständige Einträge, fachanwendungsspezifische Dienste nur die jeweiligen Fachdaten) werden.

Verzeichnisdienst bietet folgende Außenschnittstellen an (s. Nummerierung in der Abbildung):

  1. Über den TI-Konnektor wird dem KIM-Client sowie Primärsystemen eine LDAP Schnittstelle zur Abfrage der Daten bereitgestellt. Schnittstelle I_Directory_Query, dezentral.

  2. Die Konnektoren leiten die Anfragen zustandslos über das zentrale Netz der TI an den Verzeichnisdienst weiter. Über die LDAP Schnittstelle des zentrale betriebenen VZD werden speziell für solche Abfragen aufbereitete und optimierte Daten durchsucht (so genannte flache Liste). Schnittstelle I_Directory_Query, zentral.

  3. Die Kartenherausgeber (bspw. Landesärztekammer oder Kassenzahnärztliche Vereinigungen) in Kooperation mit Trust Service Provider sind verantwortlich für die Befüllung des VZD mit Basisdaten und Zertifikaten. Hierfür stell VZD eine REST API für die Administration der Daten im Verzeichnisdienst. Schnittstelle I_Directory_Administration.

  4. Die KIM Anbieter ergänzen die Basisdaten um eigene Inhalte, insb. um die KIM-EMail-Adressen. Schnittstelle I_Application_Maintenance.

  5. Für die Suche der Apotheken, z.B. in der gematik eRezept APP, existiert ein dediziertes Apothekenverzeichnis (ApoVZD). ApoVZD synchronisiert regelmäßig die Daten aus dem VZD und ergänzt diese um weitere Inhalte (z.B. um Geolokalisierung und Öffnungszeiten der Apotheken). Schnittstelle I_Directory_Administration, analog zu p.3.

  6. Für die Suche der Leistungserbringer-Institutionen im Rahmen der Berechtigungsvergabe in der elektronischen Patientenakte (ePA),vermittelt das ePA-Aktensystem die Kommunikation zwischen VZD und ePA-Frontend. Schnittstelle I_Directory_Query, zentral.

  7. In Entwicklung: TIM Anbieter registrieren sich und verifizieren sich gegenseitig mit Hilfe von VZD. Schnittstelle. I_Directory_TIM_Provider_Services

  8. In Entwicklung: VZD bietet direkten Zugriff zur den Daten über FHIR REST Schnittstellen für die TIM Clients und perspektivisch anderen registrierten Clients. Schnittstelle I_Directory_FHIR#search.

  9. In Entwicklung: Die Leistungserbringer können ihre Daten selbstständig administrieren, um z.B. die Organisationsstrukturen und Standorte zur erfassen. Schnittstelle I_Directory_FHIR#owner.

Systemarchitektur

Die folgende Abbildung gibt einen Überblick über die Systemarchitektur des Verzeichnisdienstes.

VZD overview

LDAP-Directory Datenmodell

FHIR-Directory Datenmodell

Datenmodell

api-vzd's People

Contributors

awesome-manuel avatar gem-cp avatar gem-uhe avatar ichderjens avatar patrick-werner avatar spilikin avatar svensommer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

api-vzd's Issues

JWKS endpoint or public key to check signature of federation list

For clients to check the signature of the signed federation list, an endpoint providing the JWKS must be made available.
However, neither the spec nor the open-api yaml files doesn't mention this.

Please clarify on how to receive the public key.

usually this would be provided in /.well-known/jwks.json

komLeData - Diskrepanz zwischen Spezifikation und github

In der "offiziellen" Spezifikation gemSpec_VZD_V1.14.0 ist das komLeData Attribut im JSON Format mit den Attributen "mail" und "version" definiert.
Hier ist das Attribute als eine CSV-Liste definiert: https://github.com/gematik/api-vzd/blob/main/docs/LDAP_Attribute.adoc#62-komledata .

Eine eindeutige Definition gibt es nicht. In der Spezifikation ist nie von JSON die Rede, nur im Beispiel aufgelistet. In den github docs ist auch nur ein Beispiel, aber keine formale Definition gegeben.

Wie ist die korrekte Definition des Attributes?

owner_authenticate_softcert.py fails against fhir-directory-test.vzd.ti-dienste.de

samples/directory-samples-python/directory_samples/owner_authenticate_softcert.py fails against the current deployment of fhir-directory-test.vzd.ti-dienste.de

$ poetry run owner_authenticate_softcert
Request openid-configuration manifest
curl -X GET "https://idp-ref.app.ti-dienste.de/.well-known/openid-configuration"
{
    'iat': 1689675216,
    'exp': 1689761616,
    'issuer': 'https://idp-ref.app.ti-dienste.de',
    'jwks_uri': 'https://idp-ref.app.ti-dienste.de/certs',
    'uri_disc': 'https://idp-ref.app.ti-dienste.de/.well-known/openid-configuration',
    'authorization_endpoint': 'https://idp-ref.app.ti-dienste.de/auth',
    'sso_endpoint': 'https://idp-ref.app.ti-dienste.de/auth/sso_response',
    'token_endpoint': 'https://idp-ref.app.ti-dienste.de/token',
    'auth_pair_endpoint': 'https://idp-ref.app.ti-dienste.de/auth/alternative',
    'uri_pair': 'https://idp-pairing-ref.zentral.idp.splitdns.ti-dienste.de/pairings',
    'kk_app_list_uri': 'https://idp-ref.app.ti-dienste.de/directory/kk_apps',
    'third_party_authorization_endpoint': 'https://idp-ref.app.ti-dienste.de/extauth',
    'uri_puk_idp_enc': 'https://idp-ref.app.ti-dienste.de/certs/puk_idp_enc',
    'uri_puk_idp_sig': 'https://idp-ref.app.ti-dienste.de/certs/puk_idp_sig',
    'code_challenge_methods_supported': ['S256'],
    'response_types_supported': ['code'],
    'grant_types_supported': ['authorization_code'],
    'id_token_signing_alg_values_supported': ['BP256R1'],
    'acr_values_supported': ['gematik-ehealth-loa-high'],
    'response_modes_supported': ['query'],
    'token_endpoint_auth_methods_supported': ['none'],
    'scopes_supported': [
        'openid',
        'e-rezept',
        'e-rezept-dev',
        'ebtm-bdr',
        'ebtm-bdr2',
        'fh-fokus-demis',
        'fhir-vzd',
        'gem-auth',
        'gmtik-demis',
        'ird-bmg',
        'ogr-nexenio-demo',
        'ogr-nexenio-dev',
        'ogr-nexenio-preprod',
        'ogr-nexenio-test',
        'organspende-register',
        'pairing',
        'rpdoc-emma',
        'rpdoc-emma-phab',
        'ti-messenger',
        'ti-score',
        'ti-score2',
        'zvr-bnotk'
    ],
    'subject_types_supported': ['pairwise']
}
puk_idp_sig
{"kid":"puk_idp_sig","thumbprint":"uRVsMEFmGpiL33r-fIcnSZ17g5BeiMIq7ftrmoz6Idg"}
Begin /owner-authenticate
curl -X GET "https://fhir-directory-test.vzd.ti-dienste.de/owner-authenticate"
{'Date': 'Tue, 18 Jul 2023 14:31:37 GMT', 'Server': 'Apache', 'X-Frame-Options': 'SAMEORIGIN, DENY', 'Strict-Transport-Security': 
'max-age=63072000;includeSubDomains', 'Vary': 'Origin,Access-Control-Request-Method,Access-Control-Request-Headers', 'Location': 
'https://idp-test.app.ti-dienste.de/auth?response_type=code&client_id=GEMgematFHI1KPraWvqT&scope=fhir-vzd+openid&redirect_uri=https%3A%2F%2Ffh
ir-directory-test.vzd.ti-dienste.de%2Fsignin-gematik-idp-dienst&state=D7XWAvXwEDTw5AV-TiCXJQ&code_challenge=oOLFpPcl5uyvC7bYtYmHpUiMGsWEgfI3Ds
rmMwhitvo&code_challenge_method=S256', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control': 'no-cache, 
no-store, max-age=0, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Length': '0', 'Content-Security-Policy': "default-src 
'self' fhir-directory-test.vzd.ti-dienste.de;", 'Keep-Alive': 'timeout=15, max=100', 'Connection': 'Keep-Alive'}
curl -X GET "https://idp-test.app.ti-dienste.de/auth?response_type=code&client_id=GEMgematFHI1KPraWvqT&scope=fhir-vzd+openid&redirect_uri=https%3A%2F%2Ffhir-directory-test.vzd.ti-dienste.de%2Fsignin-gematik-idp-dienst&state=D7XWAvXwEDTw5AV-TiCXJQ&code_challenge=oOLFpPcl5uyvC7bYtYmHpUiMGsWEgfI3DsrmMwhitvo&code_challenge_method=S256"
200
{
  "challenge": 
"eyJhbGciOiJCUDI1NlIxIiwia2lkIjoicHVrX2lkcF9zaWciLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2lkcC10ZXN0LmFwcC50aS1kaWVuc3RlLmRlIiwiaWF0IjoxNjg5Nj
kwNjk3LCJleHAiOjE2ODk2OTA4NzcsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJqdGkiOiJkZmYzNTRhOC0zM2JlLTRiOGEtODQ3Zi0yMjliMzEyYTZkNDAiLCJzbmMiOiI3ODA3Mjhm
MDFkMzU0NmYwYjU4NzA2YWY0Mzc4ZGE4YiIsInNjb3BlIjoiZmhpci12emQgb3BlbmlkIiwiY29kZV9jaGFsbGVuZ2UiOiJvT0xGcFBjbDV1eXZDN2JZdFltSHBVaU1Hc1dFZ2ZJM0Rzcm
1Nd2hpdHZvIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwicmVkaXJlY3RfdXJpIjoiaHR0cHM6Ly9maGlyLWRpcmVjdG9yeS10ZXN0
LnZ6ZC50aS1kaWVuc3RlLmRlL3NpZ25pbi1nZW1hdGlrLWlkcC1kaWVuc3QiLCJjbGllbnRfaWQiOiJHRU1nZW1hdEZISTFLUHJhV3ZxVCIsInN0YXRlIjoiRDdYV0F2WHdFRFR3NUFWLV
RpQ1hKUSJ9.BGb_9oyjvMrB71l47ixVIO891L20r3XWH7Wr41uRtxUxxYZM_OuMh3mB5aznMCua3xD1LrSYcTKE_bWkp-vxGA",
  "user_consent": {
    "requested_scopes": {
      "openid": "Der Zugriff auf den ID-Token",
      "fhir-vzd": "Zugriff auf die FHIR-VZD-Funktionalitaet zur Anmeldung am VZD."
    },
    "requested_claims": {
      "professionOID": "Zustimmung zur Verarbeitung der Rolle",
      "idNummer": "Zustimmung zur Verarbeitung der Id (z.B. Krankenversichertennummer, Telematik-Id)"
    }
  }
}
Extract challenge
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "api-vzd/samples/directory-samples-python/directory_samples/owner_authenticate_softcert.py", line 69, in main
    challenge_jws.verify(puk_idp_sig)
  File "api-vzd/samples/directory-samples-python/.venv/lib/python3.10/site-packages/jwcrypto/jws.py", line 386, in verify
    raise InvalidJWSSignature('Verification failed for all '
jwcrypto.jws.InvalidJWSSignature: Verification failed for all signatures["Failed: [InvalidJWSSignature('Verification failed')]"]

Introduce another EndpointDirectoryPayloadType for non-chatting Messages

In the future there will be also procedural HL7 messages through the Matrix communication. It might be good to have a convention for a procedural EndpointPayloadType like "workflow" or "praxis".
I know the CodeSystem can be enhanced easily but everyone can have a separate Endpoint apart from chat messages to send procedural messages already to which any content can be sent which will be consumed by the primary system only.

Initial structure of a Praxis in FHIR VZD Structure

The FHIR VZD will have a synchronized version of the LDAP VZD SMC-B Praxis data. As far as the FHIR data model shows, a Matrix Endpoint is added to a Healthcare Service only. Is in the synchronization a generic HealthcareService added to the Organization or do we have to do that?

Authentication of a HBA-User via a WebClient and Gematik Authenticator at VZD-Auth is not possible

Möglicherweise hängt das damit zusammen, dass dieser Vorgang hier noch nicht beschrieben ist (Kapitel 2.4 ist noch leer):
https://github.com/gematik/api-vzd/blob/61dd4e7115259ecbcacc989962d60e769b32a22f/docs/FHIR_VZD_HOWTO_Authenticate.adoc

Problem:

SequenceDiagram.FHIR-Directory.owner

Das Problem liegt zwischen "{client_callback_uri} {auth_code}" und "GET /signin-gematik-idp-dienst with {auth_code}". Die client_callback_uri kann tatsächlich nicht frei gewählt werden, der IDP prüft diese. Der Wert bei einer Authentifizierung am Auth-Service ist überlicherweise der /signin-gematik-idp-dienst Endpoint des VZD. Im Deeplink kann zumindest gewählt werden, ob dieser am Ende einen neuen Browser-Tab öffnet oder selbst die Redirect-URI aufruft. Ein neuer Browser-Tab ist natürlich aus UX-Sicht nicht unbedingt gewünscht, außerdem würde in diesem Tab ja die Redirect-URI geöffnet, also nur ein JSON-Objekt angezeigt. Für die Variante, dass der Authenticator die Redirect-URI selbst aufruft fehlt am VZD jedoch ein passender Endpoint über den der Browser das Ergebnis z.B. per Polling abfragen könnte.

VZD federation list JWS: x5c should be a certificate chain

ich kann die JWS Signierung nicht verifizieren, da das gelieferte x5c keine korrekte Chain ist.
aus einer chain kann man den public key extrahieren, was hier leider nicht moeglich ist und demnach auch die Verifizierung verungmoeglicht.

bitte den x5c korrekt generieren.

besten dank

TODO: dependency upgrade

  • gerade wird eine neue Version der basisprofile ballotiert, hier sollte die dependency geupdated werden. Entweder jetzt auf die ballot Version: de.basisprofil.r4 1.5.0-ballot, oder nach dem Ballot auf die 1.5.0, oder jetzt ballotversion, und sobald verfügbar update auf die finale Version.
    Timeline: Ende März für die finale Version
  • In der 1.5.0 basisprofile Version wurden die IHE VS und CS entfernt, diese werden in den nächsten Wochen als eigenes package released und muss als dependency hinzugefügt werden.

ProfessionOID fehlt

oid_leo_kassenaerztliche_vereinigung Betriebsstätte Leistungserbringerorganisation Kassenärztliche Vereinigung 1.2.276.0.76.4.210

VZD FederationList JWS X509 certificate is expired

Das X509 Zertifikat welches im JWS Header angehängt ist, ist nicht mehr gültig.
URL: https://fhir-directory-ref.vzd.ti-dienste.de/tim-provider-services/FederationList/federationList.jws

JWS Header:

json```
{
"x5c": [
"MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBi2KzFQ8lK4LS2j2U6zXN2dGl5tnSJyFyCLWw23xu4LacdM8cGcJOvB8gwpj0sBFo6zc1AAiXctHdmG5MapzyY="
],
"typ": "JWT",
"alg": "ES256"
}


#### Zertifikat Details:
- Serial Number: None
- Signature Algorithm: ECDSA with SHA-256
- Issuer: CN=Test CA, O=Test
- Validity:
  - Not Before: March 11, 2021 3:47:32 PM UTC
  - Not After: March 11, 2022 3:47:32 PM UTC
- Subject: CN=Test, O=Test
- Public Key:
  - Algorithm: EC
  - Curve: secp256r1
  - ...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.