diff --git a/assets/images/oauth/JWT-Konzept-Fachanwendung.png b/assets/images/oauth/JWT-Konzept-Fachanwendung.png new file mode 100644 index 0000000000000000000000000000000000000000..99a15183fda0689010d83c2c8ad10148ca2f852d Binary files /dev/null and b/assets/images/oauth/JWT-Konzept-Fachanwendung.png differ diff --git a/docs/Detailinformationen/Authentifizierung_von_Fachanwendungen.md b/docs/Detailinformationen/Authentifizierung_von_Fachanwendungen.md new file mode 100644 index 0000000000000000000000000000000000000000..d5ebe1604e87515a65826d3217d614ada89a6b31 --- /dev/null +++ b/docs/Detailinformationen/Authentifizierung_von_Fachanwendungen.md @@ -0,0 +1,80 @@ +# Authentifizierung von Fachanwendungen + +Fachanwendungen haben die Möglichkeit FIT-Connect Anträge abzurufen. Dafür müssen sie sich mithilfe von oauth2 "Client-Credentials" authentifizieren. Diese erhalten Behörden und andere Abrufberechtigte, nach einer Anmeldung im Self-Service-Portal der FITKO. (TODO: link) + +Für jede Destination müssen folgende Informationen im Self-Service-Portal bereitgestellt werden + +Entweder: + +- Liste der [LeiKa-IDs](https://www.it-planungsrat.de/DE/Projekte/Anwendungen/LeiKaPlus/leiKaPlus.html) und [Amtlicher Gemeindeschlüssel](https://www.statistikportal.de/de/gemeindeverzeichnis) + +Oder: + +- Name und Bezeichung der angeboteten Leistungen, wenn diese nicht Teil des Leistungskataloges sind + +Außerdem + +- Der Public Key zur Verschlüsselung der Antragsdaten +- Der Public Key der Fachanwendung zur Signaturprüfung +- Callback Endpunkte +- Referenzen zu allen von diesem Endpunkt unterstützen Schemas + +Nach anlegen einer Destination erhält die Behörde, die für die Destination verantwortlich ist die OAuth Client Credentials. Mit diesen kann sich das Fachverfahren authentifizieren und erhält dafür einen JWT. Mit diesem JWT ist dann ein Abruf der hinterlegten Anträge möglich + + + +<img src="../../assets/images/oauth/JWT-Konzept-Fachanwendung.png" alt="JWT Konzept" width="400"/> + +### Anforderung an die JWT-Tokens + +Die vom Auth Server generierten JWTs müssen nach [RFC 7519](https://tools.ietf.org/html/rfc7519) über folgende Attribute verfügen: + +#### Header + +Entsprechend [RFC 7519 Abschnnitt 8](https://tools.ietf.org/html/rfc7519#section-8): + +| Feld | Inhalt | **Erläuterung** | +| ---- | ------ | ----------------------------------------- | +| typ | JWT | Es handelt sich um einen JWT. | +| alg | RS512 | Der JWT verwendet RSASSA-PSS und SHA-512. | +| | | | + +**Beispiel** + +```json +{ + "typ":"JWT", + "alg":"HS256" +} +``` + +#### Body des User-JWT-Tokens + +Entsprechend den [standartisierten Feldern](http://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms): + +| Feld | Inhalt | **Erläuterung** | +| ----- | ------------------------- | ------------------------------------------------------------ | +| iat | Unix Timestamp | Zeitpunkt wann der Token ausgestellt wurde als Unix Timestamp. | +| exp | Unix Timestamp | Zeitpunkt wann der Token abläuft als Unix Timestamp (Token sollte max. 2 Stunden gültig sein vgl [BSI APP.3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium_Einzel_PDFs/06_APP_Anwendungen/APP_3_1_Webanwendungen_Edition_2020.pdf?__blob=publicationFile&v=1)). | +| scope | Liste von Destination-IDs | Eine Liste der Destination-IDs, für die der JWT einen Abruf erlaubt. | + +**Beispiel** + +```json +{  + "iat":"1620072619",  + "exp":"1620079819", + "scope": ["99108008252000:36141427-d405-40a4-8f8b-3592d544e85b", "655c6eb6-e80a-4d7b-a8d2-3f3250b6b9b1"] +} + +``` + +## Validierung der JWT-Tokens durch den Zustelldienst + +Beim Abruf am Zustelldienst muss dieser bzw. das API-Gateway überprüfen, ob der JWT-Token valide ist. Dafür sollten mindestes folgende Überprüfungen durchgeführt werden: + +1. Überprüfen, ob diese noch gültig sind und + 1. der JWT für max. 4h ausgestellt wurde. +2. Mithilfe des Public Keys des Authentifizierungsservers die Signatur des JWT überprüfen. +3. Überprüfen, ob die Destination-ID, die abgerufen werden soll teil der in den Scopes (**scope** Parameter in den JWTs) des JWTs ist. (Zugangsberechtigung der Fachanwendung). + diff --git a/docs/Detailinformationen/Authentifizierung_von_Usern.md b/docs/Detailinformationen/Authentifizierung_von_Usern.md index dba4a721410d730037bfbfbb7b7c297c895d93c4..01a786b5a76077def800a6f8fac05e11ab34867d 100644 --- a/docs/Detailinformationen/Authentifizierung_von_Usern.md +++ b/docs/Detailinformationen/Authentifizierung_von_Usern.md @@ -63,14 +63,14 @@ Entsprechend [RFC 7519 Abschnnitt 8](https://tools.ietf.org/html/rfc7519#section Entsprechend den [standartisierten Feldern](http://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms): -| Feld | Inhalt | **Erläuterung** | -| ------- | ------------------------- | ------------------------------------------------------------ | -| iat | Unix Timestamp | Zeitpunkt wann der Token ausgestellt wurde als Unix Timestamp. | -| exp | Unix Timestamp | Zeitpunkt wann der Token abläuft als Unix Timestamp (Token sollte max. 2 Stunden gültig sein vgl [BSI APP.3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium_Einzel_PDFs/06_APP_Anwendungen/APP_3_1_Webanwendungen_Edition_2020.pdf?__blob=publicationFile&v=1)). | -| scope | Liste von Destination-IDs | Eine Liste der Destination-IDs, für die der JWT eine Übermittlung erlaubt. | -| sid | UUID4 der Session | Eine unique ID zur Identifizierung der Session (muss garantiert für jede Übermittlung anders sein) | -| iss | ID des Onlinedienstes | Wird bei der Anmeldung des Onlinedienstes festgelegt und dient zur Identifizierung am API-Gateway | -| domains | Liste von Domains | Eine Liste der Domains, von denen der Onlineservice Anträge übermitteln kann. Sie muss einem Subset der Domains entsprechen, die im domains Feld des Onlinedienst-JWT angegeben wurden. (Subdomains müssen explizit angegeben werden) | +| Feld | Inhalt | **Erläuterung** | +| ------- | ------------------------------------- | ------------------------------------------------------------ | +| iat | Unix Timestamp | Zeitpunkt wann der Token ausgestellt wurde als Unix Timestamp. | +| exp | Unix Timestamp | Zeitpunkt wann der Token abläuft als Unix Timestamp (Token sollte max. 2 Stunden gültig sein vgl [BSI APP.3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium_Einzel_PDFs/06_APP_Anwendungen/APP_3_1_Webanwendungen_Edition_2020.pdf?__blob=publicationFile&v=1)). | +| scope | Liste von Zustellberechtigungs-Scopes | Eine Liste der Zustellberechtigungs-Scopes, für die der JWT eine Übermittlung erlaubt. | +| sid | UUID4 der Session | Eine unique ID zur Identifizierung der Session (muss garantiert für jede Übermittlung anders sein) | +| iss | ID des Onlinedienstes | Wird bei der Anmeldung des Onlinedienstes festgelegt und dient zur Identifizierung am API-Gateway | +| domains | Liste von Domains | Eine Liste der Domains, von denen der Onlineservice Anträge übermitteln kann. Sie muss einem Subset der Domains entsprechen, die im domains Feld des Onlinedienst-JWT angegeben wurden. (Subdomains müssen explizit angegeben werden) | **Beispiel** @@ -89,14 +89,14 @@ Entsprechend den [standartisierten Feldern](http://www.iana.org/assignments/jose Entsprechend den [standartisierten Feldern](http://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms): -| Feld | Inhalt | **Erläuterung** | -| ------- | ----------------------------- | ------------------------------------------------------------ | -| iat | Unix Timestamp | Zeitpunkt wann der Token ausgestellt wurde als Unix Timestamp. | -| exp | Unix Timestamp | Zeitpunkt wann der Token abläuft als Unix Timestamp (Token sollte max. 24 Stunden gültig sein vgl [BSI APP.3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium_Einzel_PDFs/06_APP_Anwendungen/APP_3_1_Webanwendungen_Edition_2020.pdf?__blob=publicationFile&v=1)). | -| scope | Liste von Destination-IDs | Eine Liste der Destination-IDs oder Präfixes, für die der JWT eine Übermittlung erlaubt. | -| epk | Public Key des Onlinedienstes | Der Public Key, der dem Onlinedienst bei der Anmeldung zugeordnet wurde im JWK Format nach [RFC-7517](https://tools.ietf.org/html/rfc7517) | -| aud | ID des Onlinedienstes | Wird bei der Anmeldung des Onlinedienstes festgelegt und dient zur Identifizierung des Onlineservices | -| domains | Liste von Domains | Eine Liste der Domains, von denen der Onlineservice Anträge übermitteln kann. (Subdomains müssen explizit angegeben werden) | +| Feld | Inhalt | **Erläuterung** | +| ------- | ------------------------------------- | ------------------------------------------------------------ | +| iat | Unix Timestamp | Zeitpunkt wann der Token ausgestellt wurde als Unix Timestamp. | +| exp | Unix Timestamp | Zeitpunkt wann der Token abläuft als Unix Timestamp (Token sollte max. 24 Stunden gültig sein vgl [BSI APP.3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium_Einzel_PDFs/06_APP_Anwendungen/APP_3_1_Webanwendungen_Edition_2020.pdf?__blob=publicationFile&v=1)). | +| scope | Liste von Zustellberechtigungs-Scopes | Eine Liste der Zustellberechtigungs-Scopes oder Präfixes, für die der JWT eine Übermittlung erlaubt. | +| epk | Public Key des Onlinedienstes | Der Public Key, der dem Onlinedienst bei der Anmeldung zugeordnet wurde im JWK Format nach [RFC-7517](https://tools.ietf.org/html/rfc7517) | +| aud | ID des Onlinedienstes | Wird bei der Anmeldung des Onlinedienstes festgelegt und dient zur Identifizierung des Onlineservices | +| domains | Liste von Domains | Eine Liste der Domains, von denen der Onlineservice Anträge übermitteln kann. (Subdomains müssen explizit angegeben werden) | **Beispiel**