Wie Sie das ZETA SDK integrieren

Diese Anleitung unterstützt Entwickler dabei, das ZETA-SDK zu bauen und in eigene Produkte zu integrieren.

Für mehr Details über die verschiedenen Komponenten des SKDs siehe auch die Struktur des SDK Repositories.


Status: Grob-Entwurf

Zielgruppe: Entwickler


[TOC]

Überblick

Das ZETA-SDK besteht aus einer Reihe von Modulen, die in Struktur des SDK Repositories beschrieben sind. Der Einstieg in des SDK findet dabei über die Klasse ZetaSdk statt. Diese bietet ein Builder-Interface, mit dem das ZETA SDK konfiguriert werden kann.

In der initialen Build-Konfiguration wird auch die Resource mitgegeben, d.h. die URL des Resource Servers. Nach dem build() Aufruf steht eine Instanz des ZETA SDK für diese Resource zur Verfügung. Auf diese Weise können mehrere Instanzen des ZETA SDK parallel für mehrere Fachdienste erstellt werden.

Client-API

Build-Plattformen

kotlin

Im Folgenden ist das Beispiel eines Aufrufs einer Resource am Fachdienst in kotlin dargestellt.

Die Konfigurationen sind umfangreicher als hier dargestellt und lassen sich in der API Dokumentation weiter unten bzw. besser in der IDE anschauen.

class ZetaSdkTest {

    fun sdk_halloZetaTest() = runTest {
        // Arrange
        val sdk = ZetaSdk.build(
            "https://<fachdienst-fqdn>/",
            BuildConfig(
                StorageConfig(),
                object : TpmConfig {},
                AuthConfig(listOf(""), "", "", 0),
            ),
        )

        val client = sdk.httpClient()

        val helloResult = client.get("hellozeta")
            .bodyAsText()
    }
}

API Übersicht

Dieser Abschnitt gibt einen Überblick über die Nutzung der API. Weitere Details sind im Source Code nachzusehen.

Hinweis: die hier dargestellte API stellt einen intermediären Zielzustand dar, und kann von der API im Sourcode abweichen, da bereits API-Features bedacht sind, die im aktuellen Stand des Prototyps noch nicht umgesetzt sind.

Angebotene API

Die API bietet dem ZETA client die folgenden Operationen an:

Operation Beschreibung Return value Errors
build(resource, config) Statische Methode, um einen neuen SDK Client zu erstellen. Die Resource URL des Endpunkts wird hierbei als Input gegeben. D.h. für jeden Fachdienst kann ein separater Client erzeugt werden. Weitere Parameter sind z.B. notwendige Callback-Informationen. ZetaSDKClient Object  
forget(fqdn) statische Methode, um alle Informationen zu einem FQDN zu vergessen wie client ID, client instance key, … - error codes
discover() Umsetzen der Discovery und Configuration. Dieser Call ist optional und wird ggf. automatisch nachgeholt - Fehler bei der Discovery und Configuration, insb. wenn für die Resource URL keine gültige Endpunkt-Konfiguration (im Sinne eines Eintrags in einer OPR .well-known Datei) gefunden wurde
register() Ausführen der Client registration, wenn nötig (keine client_id vorhanden). Includiert discover() falls dieses noch nicht ausgeführt wurde. - error codes
authenticate() Ausführen der Authentifizierung falls nötig (kein AccessToken vorhanden). Falls gültiges Refresh Token vorhanden, wird dieses genutzt. Inkludiert register() falls dieses noch nicht ausgeführt wurde. - error codes
httpClient() gibt einen HTTP Client zurück, dessen Operationen überschrieben werden um die notwendigen ZETA-spezifischen Protokolle umzusetzen    
close() Schliessen des ZetaSDKclients, ohne relevante Inhalte zu vergessen - error codes

Innerhalb dieser HTTP Operationen werden die init() und authenticate() Operationen automatisch aufgerufen. Diese sind idempotent und stellen die Configuration, client Registration, sowie Authentication durch. Die separate Bereitstellung der Methoden erlaubt es dem Client-System, hier flexible Umsetzungen der in den einzelnen Schritten ggf. nötigen Benutzerinteraktionen vorzusehen.

Konfiguration

Statische Informationen, die für die einzelnen Schritte benötigt werden, werden über das Storage Module zwischengespeichert. Falls diese Informationen nicht vorhanden sein sollten, werden sie über Callbacks abgefragt. Das in der build() Methode angegebene Config Objekt enthält auch die notwendigen Informationen über die Callbacks.

Callback Called when expected return value
registration_cb() wenn während register(), authenticate(), or späterer HTTP Methoden eine Client-Registrierung erforderlich ist, und die nötigen Informationen nicht vorhanden sind A reginfo object
authentication_cb() wenn während authenticate(), oder dem späteren Aufruf von HTTP Methoden Authentifizierungsinformationennötig sind. An authinfo object
auth_config Konfiguration des Authentication Prozesses, wie Token scopes, Expiry etc.  
client_config Client-Konfigurationsparameter spezifisch für die Installation, wie Verzeichnisse um Dokumente zu speicher o.ä.  
http_config Konfigurationsparameter für den HTTP Client wie timeouts, retries etc.  

Hinweis: in Implementierungsstufe 1 werden aktuell keine Callbacks erwartet. In Implementierungsstufe 2 können hier Anfragen zum Beispiel zum Pushed-Authentication-Request an den IDP hinzukommen.

Reginfo

Reginfo wird vom registration callback registration_cb() zurückgegeben.

attribute value description
client_name name of the client; according to registration-request.yaml chosen by user or application

Authinfo

Authinfo wird vom authentication callback authentication_cb() zurückgegeben.

Hinweis: die Details hier sind noch zu klären, da in Stufe 1 nur SM(C)-B Authentifizierung stattfindet.

Für mobile Anwendungen ist hier die OAuth Authentication mit Pushed Authentication Request zu betrachten. Hier ist u.a. zu klären, wie authcode, oder IDP URL übertragen werden (wenn sie nicht aus dem aufrufenden Client kommen)

auth_config

Mit dieses Objekt wird die Authentifizierung parameterisiert.

Attribut Beschreibung
scopes Scope-Werte für die Erstellung des Access Tokens
connector_address Adresse des Konnektors für den Aufruf der Signatur-Schnittstelle für SM(C)-B Signaturen

client_config

Mit diesem Objekt wird der Client an sich konfiguriert. Hierzu werden z.B. Speicherverzeichnisse, Konnektor-Adressen o.ä. an den Client gegeben.

Attribut Beschreibung
storage_config Konfiguration für das Storage Modul - abhängig von der gewählten Implementierung des Storage
tpm_config Konfiguration des TPM Module - abhängig von der gewählten Implementierung des TPM-Modules

http_config

Mit diesem Objekt wird das HTTP Protokoll parametrisiert.