Authentifizierung & Authorisierung
Die Authentifizierung erfolgt ausserhalb der API ausschliesslich über einen STS. Die API nimmt lediglich ein bereits gelöstet Bearer Token über den Header (“Authorization”) entgegen und validiert dieses über den konfigurierten STS.
Sobald der Bearer Token beim STS bezogen wurde, kann dieser unter "Authorize" eingefügt werden. Achtung! Vor dem Token muss zwingend "Bearer" stehen.
Falls die Validierung des Tokens erfolgreich ist, wird dem Benutzer die Authorisierung zu allen Controllern und Endpunkten der API gewährleistet. Die funktionale Berechtigung der API erfolgt durch die Benutzerrechte auf Basis bestehender Standardgruppen aus dem CMI Server. Alle Änderungen in CMI selbst werden mit dem Benutzer des übergebenen Tokens ausgewiesen.
Beispiel Client-Konfiguration
In dieser Anleitung wird eine Beispiel Client-Konfiguration für den STS-3 beschrieben. Die CMI API selbst braucht den Client nur für das Config-UI.
{
"ClientId": "<Client-ID (Bsp.: cmi-api-configui)>",
"RequireClientSecret": false,
"AccessTokenLifetime": 3600,
"AllowedGrantTypes": [
"authorization_code"
],
"ClientSecrets": [
{
"value": "<Client-Secret SHA512 Encrypted>"
}
],
"AllowAccessTokensViaBrowser": true,
"RedirectUris": [
"regex:^(<Protokoll>:\/\/<Server>:<Port>).*"
],
"PostLogoutRedirectUris": [
"regex:^(<Protokoll>:\/\/<Server>:<Port>).*"
],
"AllowedScopes": [
"metatool",
"openid",
"profile"
],
"AllowedCorsOrigins": [
"<Protokoll>://<Cmi-Api>:<Port>"
]
}
- GrantType "authorization_code" ist nötig
- Protokoll, Server und Port beziehen sich auf die CMI-API.
- Das ClientSecret muss als SHA-512-Encrypted Secret hinterlegt werden
Beispiel Token-Request
Um die CMI API verwenden zu können (API Requests) muss ein gültiges Token vorhanden sein. Hier ist ein STS-Client für
den Grant-Type client_credentials
.
Der OpenID-Client wird nicht für die API selbst benötigt, sondern vom aufrufenden System, das die API verwenden möchte.
{
"ClientId": "<Client-ID (Bsp.: cmi-api-tokenrequest)>",
"AccessTokenLifetime": 3600,
"AllowedGrantTypes": [
"client_credentials"
],
"ClientSecrets": [
{
"value": "<Client-Secret SHA512 Encrypted>"
}
],
"AllowedScopes": [
"metatool",
"openid",
"profile"
],
"ClientCredentialsBackendUser": {
"username": "<CMI-User>",
"password": "<CMI-User Passwort>"
}
}
Wenn der Client im STS konfiguriert ist, so kann mit dem folgenden Curl-Request ein Token bezogen werden:
curl --location --request POST '<Protokoll>://<Sts-Server>/<Mandant>/identity/connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=metatool' \
--data-urlencode 'client_secret=<Client-Secret als Plain-Text>' \
--data-urlencode 'client_id=<Client-ID>'