OAuth 2.0: Der Client Credentials Flow im Detail
Im vorherigen Teil der Blogpostreihe zu OAuth2 wurde der Authorization Code Flow betrachtet. Heute werden wir uns den OAuth 2.0 Client Credentials Flow anschauen, der vor allem für eine Autorisierung ohne Benutzerinteraktion interessant ist.
OAuth 2.0Der OAuth 2.0 Client Credentials Flow wird angewendet, wenn wie erwähnt keine Nutzerinteraktion möglich ist, sprich wenn der Resource Owner keine Möglichkeit besitzt, sich über einen Logindialog beim Authorization Server zu authentifizieren. Er eignet sich daher besonders für eine Maschine-to-Maschine Autorisierung. Folgende Usecases sind z.B. denkbar:
- Microservice to Microservic
- Automatisierte Prozesse, Cronjobs
Beim Client Credentials Flow wird der Token-Endpunkt des Authorization Server direkt vom Client angesprochen, ohne dass der Authorization Server zuvor einen Redirect zu einer Loginseite veranlassen muss. Es gibt also keinen Logindialog, da eine Nutzerinteraktion in diesem Anwendungsfall nicht möglich ist. Der Client authentifiziert sich direkt über seine Client ID und sein Client Secret beim Authorization Server. Diese Informationen müssen zuvor bereits manuell beim Authorization Server hinterlegt werden. Nach erfolgreicher Authentifizierung erhält der Client das Access Token
Erklärung des Client Credentials Flows:
1) Der Client sendet eine Tokenanfrage an den Token-Endpunkt des Authorization Server. Diese Anfrage enthält die Client ID und das Client Secret
POST {Token Endpoint} HTTP/1.1 Host: {Authorization Server} Authorization: Basic {Client Credentials} // - Base64 Encodiertes Client ID + Client Secret Content-Type: application/x-www-form-urlecoded grant_type=client_credentials // - Die Art des Grants &scope={Scopes} // - Was kann der Client mit der Autorisierung durchführen.
2) Bei erfolgreicher Authentifizierung, liefert der Authorization Server das Access Token an den Client aus
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache { “access_token”: “{Access Token}”, // – Das Access Token “token_type”: “{Token Type}”, // – Die Art des Tokens “expires_in”: {Lifetime In Seconds}, // – Optional “scope”: “{Scopes}” // – Zu was der Client tatsächlich Autorisiert ist }
3) Der Client frägt die Ressource beim Resource Server an und präsentiert seinen Token. Dieser Validiert die Anfrage und liefert die Ressource.
Fazit: Der OAuth 2.0 Client Credentials Flow kommt zu Zug, wenn ohne Benutzerauthentifizierung gearbeitet wird
Benötigt eine Maschine, ein Microservice oder ein automatisierter Prozess Zugriff auf eine geschützte Ressource, können Grants die eine Benutzerauthentifizierung benötigen, nicht verwendet werden, da hier eine Benutzerinteraktion nötig ist. In diesem Szenario kommt der Client Credentials Flow zum Zug.
Quellen
- https://auth0.com/docs/get-started/authentication-and-authorization-flow/client-credentials-flow
- https://oauth.net/2/grant-types/client-credentials/
- https://darutk.medium.com/diagrams-and-movies-of-all-the-oauth-2-0-flows-194f3c3ade85