Zum Hauptinhalt springen

Anmeldung

Jeder Zugriff auf das CMS erfordert eine Anmeldung. Welches Verfahren aktiv ist, legt die Serverkonfiguration fest (httpAuth, siehe Betrieb):

httpAuthVerfahren
./auth/basicBasic-Anmeldung mit Konto und Kennwort (Voreinstellung)
./auth/oidcOpenID Connect, zusätzlich Bearer-Token und weiterhin Basic

Unabhängig davon funktionieren immer Kurzzeit-Token und, falls konfiguriert, Header-SSO.

Ohne gültige Anmeldung antwortet das CMS mit 401 bzw. 403.

Basic​

Konto und Kennwort werden im Authorization-Header übertragen (Basic Authentication). Das Konto muss in cms/users existieren.

curl -u 'CMS_User_01:<kennwort>' https://cms.example.org/schema
const res = await fetch('https://cms.example.org/schema', {
headers: { Authorization: 'Basic ' + btoa('CMS_User_01:<kennwort>') },
})

Hat das Konto noch kein Kennwort, wird das bei dieser Anmeldung verwendete gespeichert (siehe Kennwörter). Im OIDC-Modus ist das nicht möglich: Dort funktioniert Basic nur für Konten, die bereits ein Kennwort haben.

Kurzzeit-Token​

GET /token liefert für das angemeldete Konto ein Token als Text. Es ist 5 Minuten gültig und kann in dieser Zeit beliebig oft als URL-Parameter token verwendet werden. Damit lassen sich z. B. Mediendateien direkt in <img>- oder <video>-Elementen einbinden, die keinen Authorization-Header senden können.

const cms = 'https://cms.example.org'
const auth = { Authorization: 'Basic ' + btoa('CMS_User_01:<kennwort>') }

const token = await fetch(`${cms}/token`, { headers: auth }).then((res) => res.text())

// Datensatz mit fertigen Datei-URLs lesen (siehe Datenschnittstelle, ?exported)
const record = await fetch(`${cms}/data/tutorial/file/<id>?exported`, { headers: auth }).then((res) => res.json())

image.src = `${cms}${record.image.path}?token=${encodeURIComponent(token)}`

Tokens werden nur im Speicher des Servers gehalten und sind nach einem Neustart ungültig.

OIDC​

Mit httpAuth: "./auth/oidc" meldet sich die Pflegeanwendung über einen OpenID-Connect-Provider an, z. B. Keycloak oder den Anmeldedienst von NeuroomNet. Anwendungen können stattdessen ein Bearer-Token des Providers senden (Authorization: Bearer …).

In beiden Fällen sucht das CMS das Konto anhand des Claims email in cms/users (Feld account). Bei Microsoft ADFS wird die E-Mail-Adresse notfalls aus dem Access Token gelesen.

  • Existiert kein passendes Konto und ist oidc.autoCreate gesetzt, legt das CMS das Konto ohne Rechte an.
  • Die Rechte kommen immer aus dem CMS (Konto und Rollen in cms/users), nicht vom Provider. Ein Konto, das sich über OIDC anmelden kann, sieht also nichts, solange ihm im CMS keine Rechte gegeben werden.

Konfiguration (oidc in der Serverkonfiguration):

SchlüsselBedeutung
issuerURL des Providers
clientId, clientSecretZugangsdaten des CMS beim Provider
selfeigene, von außen erreichbare URL des CMS (für die Rückleitung)
oidcResponseTypeResponse Type, Voreinstellung id_token
oidcResourceoptionale Ressource(n) für die Anfrage
autoCreateKonten bei der ersten Anmeldung automatisch anlegen

Abmelden: /oidcLogout, danach Weiterleitung auf /bye.

Header-SSO​

Für vorgeschaltete Anmeldesysteme (z. B. F5 BIG-IP) kann das CMS einem Header vertrauen, der die E-Mail-Adresse des Kontos enthält. Damit nicht jeder diesen Header setzen kann, muss ein zweiter Header ein gemeinsames Geheimnis enthalten.

Schlüssel in headerSSOBedeutung
emailFieldName des Headers mit der E-Mail-Adresse (= account)
secretFieldName des Headers mit dem Geheimnis
secreterwarteter Wert des Geheimnisses

Header-SSO ist nur aktiv, wenn emailField und secretField gesetzt sind.

Weitere Endpunkte​

EndpunktErgebnis
GET /userangemeldetes Konto: account, Anmeldeverfahren (auth), Rollen und Namen der Rechte-Sammlungen
GET /versionVersion des CMS und der geladenen Erweiterungen (Text)
GET /logon?ret=<url>Nach erfolgter Anmeldung Weiterleitung auf <url>, sofern diese URL als Datensatz in der API cms/apps (Feld url) eingetragen ist. So können Anwendungen eine Anmeldung im Browser anstoßen.