Skip to content

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.

swagger-auth

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>'