Programmatischen API-Zugriff einrichten¶
Ein Service Account ermöglicht den programmatischen Zugriff auf die ODI-API ohne interaktive Anmeldung. Er wird typischerweise für automatisierte Prozesse, Skripte oder externe Systeme verwendet.
In Keycloak wird ein Service Account nicht als eigenständiger Benutzer angelegt, sondern über einen Client mit aktiviertem OAuth2-Flow client_credentials. Keycloak erstellt dabei intern automatisch einen zugehörigen Benutzer für den Client.
Ablauf im Überblick¶
| Schritt | Ergebnis |
|---|---|
| 1. Keycloak aufrufen | Administrationsoberfläche im Realm der ODI |
| 2. Client anlegen | Client mit Service Account |
| 3. Berechtigungen setzen | Service Account trägt ckan-token und gitlab-token |
| 4. Client Secret abrufen | Client ID und Client Secret für das anzubindende System |
| 5. Zugriff prüfen | Access-Token abgerufen, CKAN-Token gültig |
Voraussetzungen¶
- Administratorrechte in Keycloak sind erforderlich. Ohne diese muss die Einrichtung durch die zuständige Stelle beantragt werden.
- Entweder eine Gruppe mit den hinterlegten Tokens (siehe Autorisierung) oder der CKAN-API-Token bzw. GitLab-Token für diesen Service Account muss vorhanden sein.
Vorgehen¶
Die Einrichtung ist für Produktion und Testsystem identisch. Als Beispiel dient ein Client für das Landesamt für Umwelt Schleswig-Holstein.
1. Keycloak aufrufen¶
Die Keycloak-Administrationsoberfläche ist über die zugehörige URL der jeweiligen Umgebung erreichbar:
keycloak.odi.schleswig-holstein.de — Realm: open-data-infrastruktur
keycloak.odi-stage.schleswig-holstein.de — Realm: open-data-infrastruktur
2. Client anlegen¶
- Im Realm der ODI im Menü Clients öffnen und Create client wählen.
-
General settings: Als Client type bleibt
OpenID Connecteingestellt. Die Client ID ist frei wählbar und sollte der Institution eindeutig zuordenbar sein, die Daten veröffentlichen möchte (z. B.landesamt-fuer-umwelt-sh-api-client,zit-api-client). Mit Next fortfahren. -
Capability config: Folgende Einstellungen setzen und mit Next fortfahren:
Einstellung Wert Wirkung Client authentication On Der Client authentifiziert sich mit einem Client Secret. Service accounts roles aktiviert Schaltet den Flow client_credentialsfrei und legt den Service Account an.Standard flow und alle übrigen Flows deaktiviert Der Client wird nicht für die interaktive Anmeldung verwendet. -
Login settings: Alle Felder leer lassen und mit Save speichern.
Standard flow ist vorausgewählt
Keycloak aktiviert Standard flow bei neuen Clients von selbst. Für einen Service Account muss der Haken entfernt werden.
3. Berechtigungen setzen¶
Die Berechtigungen hängen nicht am Client selbst, sondern am zugehörigen Service-Account-Benutzer.
- Am Client den Tab Service accounts roles öffnen.
-
Auf den Benutzernamen
service-account-<client-id>klicken. Keycloak öffnet die Detailseite des Service-Account-Benutzers.
Für die Zuweisung gibt es zwei Möglichkeiten:
| Über eine Gruppe | Direkt am Service Account | |
|---|---|---|
| Geeignet, wenn … | die Tokens für mehrere Service Accounts oder Benutzer eines Herausgebers gelten | der CKAN-Token oder GitLab-Token nur für diesen einen Service Account ausgestellt wird |
| Tokens tauschen | einmal an der Gruppe | an jedem Service Account einzeln |
Über eine Gruppe¶
Die Gruppe wird vorab angelegt — siehe Autorisierung.
- Am Service-Account-Benutzer den Tab Groups öffnen und Join Group wählen.
-
Die Gruppe des Herausgebers suchen, markieren und mit Join bestätigen.
Direkt am Service Account¶
- Am Service-Account-Benutzer den Tab Attributes öffnen.
- Die Tokens als Attribute eintragen; weitere Zeilen über Add attributes hinzufügen:
- Key
ckan-token, Value: CKAN-API-Token - Key
gitlab-token, Value: GitLab-Token
- Key
-
Mit Save speichern.
Die Schreibweise der Keys muss exakt stimmen — klein geschrieben, mit Bindestrich. Nicht beide Wege zugleich verwenden; sonst ist später unklar, welcher Token gilt.
4. Client Secret abrufen¶
- Zurück zur Client-Ansicht wechseln: unter Clients den angelegten Client auswählen.
- Den Tab Credentials öffnen.
-
Das Client Secret über das Kopieren-Symbol in die Zwischenablage übernehmen; das Augen-Symbol blendet es ein.
Client ID und Client Secret werden über einen sicheren Kanal an das Team oder System weitergegeben, das Daten veröffentlichen soll.
Client Secret schützen
Das Client Secret niemals in Versionsverwaltungssystemen, Tickets oder Logs ablegen. Ist es in falsche Hände geraten, erzeugt Regenerate ein neues; das alte ist danach sofort ungültig.
5. Zugriff prüfen¶
Mit Client ID und Client Secret wird ein Access-Token über den Token-Endpunkt von Keycloak abgerufen — siehe API-Token abrufen.
Ob dem Service Account ein gültiger CKAN-Token zugeordnet ist, beantwortet der CKAN-Service:
| Antwort | Bedeutung |
|---|---|
hasCkanToken: true, ckanTokenValid: true |
Der Service Account kann Daten veröffentlichen. |
hasCkanToken: true, ckanTokenValid: false |
Keycloak liefert einen Token, der Datenkatalog lehnt ihn aber ab — widerrufen, falsch kopiert oder aus der anderen Umgebung. |
hasCkanToken: false |
Dem Service Account ist kein ckan-token zugeordnet — Gruppe nicht zugewiesen oder Attribut falsch geschrieben. |
Weiterführende Links¶
- API-Token abrufen — Access-Token mit Client ID und Client Secret abrufen
- Autorisierung — Gruppe für einen Herausgeber anlegen
- Benutzer anlegen und CKAN-Token zuweisen — dasselbe für Personen statt Systeme
- Datensatz hochladen — erster Aufruf der ODI-API





