CMI Default Clients
Dieses Kapitel enthält Beispielkonfigurationen für die üblichen CMI Client-Anwendungen. Es wird der Beispielmandant emmenheim verwendet.
Desktop Client
Für den Desktop Client kann folgende Client-Konfiguration als Ausgangslage verwendet werden:
{
"ClientId": "metatool",
"AccessTokenLifetime": 43200,
"AllowedGrantTypes": ["implicit"],
"ProtocolType": "oidc",
"AllowAccessTokensViaBrowser": true,
"RedirectUris": ["oob://metatool/callback"],
"PostLogoutRedirectUris": ["oob://metatool/logout"],
"AllowOfflineAccess": true,
"AllowedScopes": [
"openid",
"profile",
"metatool"
]
}
Desktop Client im "nicht interaktiven" Modus
Der Desktop Client kann mittels Argumente gestartet werden. Dafür wird der Password Grant Type verwendet. Folgende Client-Konfiguration kann als Ausgangslage verwendet werden:
{
"ClientId": "nonInteractiveDesktopClient",
"AccessTokenLifetime": 43200,
"AllowedGrantTypes": ["password"],
"ClientSecrets": [
{
"value": "<Sha512 Hash des Secrets>"
}
],
"AllowedScopes": [
"openid",
"profile",
"metatool"
]
}
Der Client kann dann folgendermassen gestartet werden:
.\cmi.client.main.exe -user=<Benutzername> -pw=<Passwort> -stsclientid=nonInteractiveDesktopClient -stsclientsecret=<ClientSecret als Plain-Text>
Diverse Web Clients
Es gibt diverse Web Client Anwendungen, die die Client ID webAppClient verwenden. Die folgende nicht abschliessende Liste verschafft einen Überblick:
- CMI Mail
- CMI Sitzungen
- Dossierbrowser und Zusammenarbeit Dritte
- CMI Schule
- Dossierjournal
Achtung: Der CMI Web Client (welcher den Desktop Client ersetzten wird) verwendet aus Kompatibilitätsgründen mit dem CMI STS 2 diese Client ID per Default ebenfalls. Wird der CMI Web Client mit dem CMI STS 3 zusammen betrieben, wird empfohlen diese Client ID per Konfiguration zu überschreiben. Siehe dazu CMI Web Client.
Für diese Client-Anwendungen kann folgende Client-Konfiguration als Ausgangslage verwendet werden:
{
"ClientId": "webAppClient",
"AccessTokenLifetime": 14400,
"AllowedGrantTypes": ["implicit"],
"AllowAccessTokensViaBrowser": true,
"AllowOfflineAccess": true,
"AllowedScopes": [
"openid",
"profile",
"metatool"
],
"RedirectUris": [
// CMI Mail, Dossierjournal
"https://mail.emmenheim.ch/#/security/signin?_\u0026",
"https://dossierjournal.emmenheim.ch/#/security/signin?_\u0026",
// Mobile Clients
"https://emmenheim.ch/sitzungsvorbereitung/emmenheim/#/auth/sts?login\u0026",
"https://emmenheim.ch/dossierbrowser/emmenheim/#/auth/sts?login\u0026",
"https://emmenheim.ch/zusammenarbeitdritte/emmenheim/#/auth/sts?login\u0026",
// CMI Schule
"https://schule.emmenheim.ch/#/mandant/schule.emmenheim.ch/auth/sts?mandant=schule.emmenheim.ch\u0026",
"https://schule.emmenheim.ch/#/mandant/emmenheim/auth/sts?mandant=emmenheim\u0026"
],
"AllowedCorsOrigins": [
"https://mail.emmenheim.ch",
"https://dossierjournal.emmenheim.ch",
"https://webdav.emmenheim.ch",
"https://emmenheim.ch",
"https://schule.emmenheim.ch"
],
"PostLogoutRedirectUris": [
"https://mail.emmenheim.ch/#/security/signout",
"https://emmenheim.ch/sitzungsvorbereitung/emmenheim/#/auth/sts?logout",
"https://emmenheim.ch/dossierbrowser/emmenheim/#/auth/sts?logout",
"https://emmenheim.ch/zusammenarbeitdritte/emmenheim/#/auth/sts?logout",
"https://schule.emmenheim.ch/emmenheim/#/loggedOut"
]
}
App Clients
Für die Android und IOS App von Dossierbrowser und CMI Sitzungen wird die Client ID appClient verwendet.
{
"ClientId": "appClient",
"AllowedGrantTypes": ["implicit"],
"ProtocolType": "oidc",
"AllowAccessTokensViaBrowser": true,
"AccessTokenLifetime": 43200,
"RedirectUris": [
// Uris fur die mobilen Clients "CMI Sitzungen" / Dossierbowser (IOS und Android)
"https://emmenheim.ch/mobileclients/proxy/emmenheimsv/view/auth.html#/sts?login\u0026",
"https://emmenheim.ch/sitzungsvorbereitung/emmenheim/view/auth.html#/sts?login\u0026"
"https://emmenheim.ch/mobileclients/proxy/emmenheimdb/view/auth.html#/sts?login\u0026",
"https://emmenheim.ch/dossierbrowser/emmenheim/view/auth.html#/sts?login\u0026",
],
"AllowedCorsOrigins": ["https://emmenheim.ch"],
"PostLogoutRedirectUris": [
"file:///android_asset/www/view/auth.html#/sts?logout",
"http://localhost:8080/www/view/auth.html#/sts?logout"
],
"AllowOfflineAccess": true,
"AllowedScopes": [
"openid",
"profile",
"metatool"
]
}
CMI Web Client
Bei CMI Web Client handelt es sich um eine Web-Anwendung, die den Desktop Client langfristig ersetzt.
Für diese Client-Anwendungen kann folgende Client-Konfiguration als Ausgangslage verwendet werden:
{
"ClientId": "webClient",
"AccessTokenLifetime": 3600,
"AllowedGrantTypes": ["implicit"],
"AllowAccessTokensViaBrowser": true,
"AllowOfflineAccess": true,
"AllowedScopes": [
"openid",
"profile",
"metatool"
],
"RedirectUris": [
"regex:^https\:\/\/webclient\.emmenheim\.ch\/\#\/security\/signin(.*)"
"https://webclient.emmenheim.ch/assets/silent_refresh.html",
],
"AllowedCorsOrigins": [
"https://webclient.emmenheim.ch"
],
"PostLogoutRedirectUris": [
"https://webclient.emmenheim.ch/#/security/signout"
]
}
Achtung: Der CMI Web Client verwendet standardmässig die Client ID
webAppClient
um mit dem CMI STS 2 kompatibel zu sein. Im Kontext vom CMI STS 3 sollte diese Client ID nicht verwendet werden. Die Dateiconfig.json
des CMI Web Clients kann angepasst werden, damit die Client IDwebClient
verwendet wird.jsonc { "security": { "authority": "...", "client_id": "webclient", // overwrite der Client ID "automaticSilentRenew": true // silent refresh aktivieren }, //[...] }
Silent Refresh:
Wenn das Access-Token abgelaufen ist, leitet der CMI Web Client den Benutzer zurück auf den CMI STS um, damit sich der Benutzer erneut anmelden kann.
Der CMI Web Client ist in der Lage das Access-Token vor dem Ablauf durch ein neues Access-Token zu ersetzten, ohne dass der Benutzer eine Aktion ausführen muss. Dazu sind folgende Konfigurationen erforderlich:
- Der Client muss folgende Redirect-Uri erlauben:
https://<Basis Url des Web Clients>/assets/silent_refresh.html
- Die
AccessTokenLifetime
kann heruntergesetzt werden, sollte 180 Sekunden jedoch nicht unterschreiten. - Beim Web Client muss in der Datei
config.json
die Optionsecurity.automaticSilentRenew
auftrue
gesetzt sein. - Je nach Hosting-Szenario ist es erforderlich, dem Web Client das Einbetten des CMI STS in einem IFrame zu erlauben. Dazu muss der Web Client in die frame-ancestors Quellen in der CSP-Konfiguration hinzugefügt werden.
Hinweis: Der Silent Refresh erfordert, dass der Browser über eine gültiges CMI STS Session-Cookie verfügt. Ist diese Session abgelaufen, wird kein Silent Refresh mehr durchgeführt. Der Benutzer wird dann zum CMI STS umgeleitet, sobald das Access-Token abgelaufen ist. Aus diesem Grund sollte das Session-Cookie deutlich länger gültig sein, als die AccessTokenLifetime. Siehe Cookie-Lifetime, um das Session-Cookie zu konfigurieren.
Hinweis: "Silent Refresh"-Versuche werden nach dem ersten Fehler (Timeouts, 5XX-Status) abgebrochen und nicht wiederholt.
Push Service
Die Dokumentation zum Push Service enthält weitere Informationen darüber, wie dieser mit dem CMI STS zusammenarbeitet. Beim CMI STS kann der fix benannte Client pushServiceClient
wie folgt hinterlegt werden:
{
"ClientId": "pushServiceClient",
"AccessTokenLifetime": 3600,
"AllowedGrantTypes": ["client_credentials"],
"ProtocolType": "oidc",
"AllowAccessTokensViaBrowser": false,
"AllowOfflineAccess": true,
"ClientSecrets": [
{
"value": "<Sha512 Hash des Secrets>"
}
],
// ClientCredentialsBackendUser wird unter folgenden Bedingungen benötigt:
// Push Service Version < 3.0 oder CMI Server Version < 23.
// Ansonsten kann der Block 'ClientCredentialsBackendUser' entfernt werden
"ClientCredentialsBackendUser": {
"username": "pushServiceAdmin",
"password": "<Passwort des technischen CMI Benuters>"
},
"AllowedScopes": [
"push-api",
"metatool"
]
}
Push Service 3.0 / CMI Server Service Release ab 23
Das Access-Token wird mit Scope push-api
gelöst, auf dessen Basis der CMI Server ab Release 23 die Autorisierung vornimmt. Der technische Benutzer in CMI Server wird nicht mehr benötigt.
- Eintrag ClientCredentialsBackendUser
kann aus der CMI STS Client-Konfiguration entfernt werden
- Ein technischer Benutzer (i.d.R. mit dem Benutzernamen pushServiceAdmin
) beim CMI Server wird nicht benötigt und kann entfernt werden
Push Service 2.0 / CMI Server Service Release bis und mit 22
Dabei muss ein technischer Benutzer beim CMI Server angelegt werden. Dessen Benutzername und Passwort wird bei ClientCredentialsBackendUser
hinterlegt. Wenn der Push Service das korrekte Client Secret kennt, stellt der CMI STS ein Access-Token mit den Claims des technischen Benutzers für den Push Service aus.
WebDav Service
Die Dokumentation zum WebDav Service enthält weitere Informationen darüber, wie dieser mit dem CMI STS zusammenarbeitet. Beim CMI STS kann der Client webdav wie gefolgt hinterlegt werden:
{
"ClientId": "webdav",
"AccessTokenLifetime": 43200,
"AllowAccessTokensViaBrowser": true,
"AllowedGrantTypes": [
"delegation",
"implicit"
],
"RedirectUris": [
"https://emmenheim.ch/webdav/account/callback"
],
"AllowedScopes": [
"openid",
"profile",
"metatool"
],
"ClientSecrets": [
{
"value": "<Sha512 Hash des Secrets>"
}
]
}
Siehe auch Delegation Grant für weitere Informationen zum Grant Type delegation. Wenn der WebDav Service das korrekte Client Secret kennt, kann er bestehende Access-Tokens durch ein anderes Access-Token ersetzen.