Skip to content

Delegation Grant

Um die Übergabe einer Authentifizierung zwischen CMI Services zu erlauben, wurde ein proprietärer Grant Type implementiert: delegation. Dieser kann verwendet werden, um ein bestehendes AccessToken für Service A gegen ein neues für Service B auszutauschen.

Access-Tokens können so pro Client mit einer passenden Laufzeit und Scopes ausgestattet werden und bei Bedarf gegen neue ausgetauscht werden.

Wird der Delegation Grant aktiviert, muss ein ClientSecret gesetzt sein.

Eine mögliche Konfiguration sieht dann so aus:

{
    //...
    "tenants": {
        "mandant": {
            "Clients": [
                {
                "ClientId": "WebDavClient",
                "ClientSecrets": [
                    {
                        "value": "bd2b1aaf7ef4f09be9f52ce2d8d599674d81aa9d6a4421696dc4d93dd0619d682ce56b4d64a9ef097761ced99e0f67265b5f76085e5b0ee7ca4696b2ad6fe2b2",
                        "description": "The SHA-512 Hash of the Secret's Value"
                    }
                ],
                "AllowedGrantTypes": [ "delegation" ],
                //...
                }
            ]
            //...
        }
    }
}

Ein Token wird gelöst, in dem der Client einen Request an den Token-Endpunkt stellt (siehe .well-known/openid-configuration). Er übergibt dabei die Parameter clientId, clientSecret mit seinen eigenen Credentials, setzt den Parameter grant_type auf delegation und den Parameter token auf das bestehende Access-Token.

Kodierung: application/x-www-form-urlencoded. Beispiel:

POST /hauptmandant/identity/connect/token HTTP/1.1
Host: localhost:5001
Content-Type: application/x-www-form-urlencoded
Content-Length: ...

client_id=WebDavClient&client_secret=secret&grant_type=delegation&token=eyJhbGc...

Als Antwort erhält der Client ein JSON Objekt, das sein neues Access-Token enthält:

{
    "access_token": "eyJhbG...",
    "expires_in": 3600,
    "token_type": "Bearer",
    "refresh_token": "458125...",
    "scope": "metatool offline_access openid profile"
}

Siehe auch Fehler Codes.