CMI STS 2: Impersonifizierung
Aufgrund von Sicherheitsüberlegungen wurde ein Feature vom CMI STS 2, welches häufig von Schnittstellen verwendet wird, nicht im CMI STS 3 umgesetzt. Somit müssen Schnittstellen zuerst mit dem CMI STS 3 kompatibel gemacht werden, wenn sie den "Impersonation Grant" vom CMI STS 2 verwenden. Stattdessen können "Client Credentials" oder der "Delegation Grant" verwendet werden.
Dieses Kapitel beschreibt die Änderung, die erforderlich ist, um vom Impersonation Grant auf den Client Credentials Grant zu wechseln. Es gibt die Client-Library CMI.STS.Client, die die Migration vereinfacht.
Ausgangslage: CMI STS 2, Impersonifizierung, OAuth Grant Type "Non-Standard-Password-Flow"
Aktuell sendet eine Schnittstelle folgendes an den CMI STS 2. USERNAME
ist der technischer Benutzer im CMI. Die Client ID server
ist ein hart codierter Wert im CMI STS 2.
POST /identity/connect/token HTTP/1.1
Host: {STS_HOST}
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
grant_type=password&scope=metatool&client_id=server&client_secret={SECRET}&username={USERNAME}&password={PASSWORT}&acr_values=tenant%3A{MANDANTEN ID}
Anpassung: CMI STS 3, OAuth Grant Type "Client Credentials"
Die CLIENT_ID
wird durch die CMI STS 3 Konfiguration festgelegt. CLIENT_ID
kann den Namen der Schnittstelle haben. Heisst die Schnittstelle ABC Sync
, könnte die Client ID abcsync
verwendet werden. Es muss kein Benutzer angegeben werden, dieser wird beim CMI STS 3 hinterlegt.
POST /identity/connect/token HTTP/1.1
Host: {STS_HOST}
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
grant_type=client_credentials&scope=metatool&client_id={CLIENT_ID}&client_secret={SECRET}&scope=metatool
Beim CMI STS 3 wird für die Schnittstelle ein eigener Client konfiguriert:
{
"ClientId": "{CLIENT_ID}",
"AllowedGrantTypes": ["client_credentials"],
"ProtocolType": "oidc",
"AllowAccessTokensViaBrowser": false,
"AllowOfflineAccess": true,
"ClientSecrets": [
{
"value": "{Sha512 Hash des SECRETS}"
}
],
"ClientCredentialsBackendUser": {
"username": "{USERNAME}",
"password": "{Passwort des technischen CMI Benutzers}"
},
"AllowedScopes": ["metatool"]
}
Beispiel-Request:
curl --location --request POST 'https://localhost:44391/hauptmandant/identity/connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=metatool' \
--data-urlencode 'client_id=abcsync' \
--data-urlencode 'client_secret=123'
Response (200 OK):
{
"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjIyRTIzRDY1RDNDQjExMkEzOUQ1OEM3RjI0NzhCNkRGQTE1OTBDRUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJJdUk5WmRQTEVTbzUxWXhfSkhpMjM2RlpETzQifQ.eyJuYmYiOjE2MjYzNjIxMjYsImV4cCI6MTYyNjM2NTcyNiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzOTEvaGF1cHRtYW5kYW50L2lkZW50aXR5IiwiYXVkIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzOTEvaGF1cHRtYW5kYW50L2lkZW50aXR5L3Jlc291cmNlcyIsImNsaWVudF9pZCI6ImVwbGFuIiwic3ViIjoiaGF1cHRtYW5kYW50JDI5M2ZiZDMwN2RkMjQ0ZTc4YTRjNmI2NDQwNDAyZTNlIiwiYXV0aF90aW1lIjoxNjI2MzYyMTI2LCJpZHAiOiJsb2NhbCIsInVzZXJfaWQiOiJnZXZlciIsImdpdmVubmFtZSI6IkhhbnMiLCJuYW1lIjoiZ2V2ZXIiLCJlbWFpbCI6ImVsaWEuc2Vpa3JpdHRAY21pYWcuY2giLCJuYW1laWRlbnRpZmllciI6IjI5M2ZiZDMwN2RkMjQ0ZTc4YTRjNmI2NDQwNDAyZTNlIiwidXNlcl9ndWlkIjoiMjkzZmJkMzA3ZGQyNDRlNzhhNGM2YjY0NDA0MDJlM2UiLCJmdWxsbmFtZSI6IkhhbnMgZ2V2ZXIiLCJhcGlfc2VydmVyIjoiaGF1cHRtYW5kYW50IiwidGVuYW50IjoiaGF1cHRtYW5kYW50Iiwic2Vzc2lvbl9ndWlkIjoiNTY3YzAyOTY2MDQ1NDUzYTk5YzJjMGJlODY2MDMxMDQiLCJqdGkiOiI4NTI4QUI4N0U3RTYxNUE1MkQ1MDk0NjY4MkMyRTREOCIsImlhdCI6MTYyNjM2MjEyNiwic2NvcGUiOlsibWV0YXRvb2wiXSwiYW1yIjpbImNtaV9idWlsdGluIl19.uuPjBRxLr8Mfq3fbQqTp2-zfHnYNDEJCs8h4ySu4tpJ4L34bdVvkNpoKYyNNu1Fi7bfVK1uU3Ne5L22ZU2I2rUZFguS47GVrQ0hDIaMVf5AnWLNcEcahbE-W5JaP4yk0A5JSgsECsjwtDbu28cBdzD-PvKowQYNqxmKOnBK1kyW3rPb-8Ju-H2v_XL1Z_RSev60Pe6KTzSQijpx-5lCRozCQc_JWM9mWRDqSt-D2PTEWO9zJD06kSu2_c9tVei8rZEESKypj7p-B2IbBaBc56S9IMXwiYQcNofMKnlNPDUPGakdaUqWpHEPD1RVdnH1EdSqSbuzWoWBnjTylJ8mAPw",
"expires_in": 3600,
"token_type": "Bearer",
"scope": "metatool"
}