« DeepSeek apiplatform keycloak » : différence entre les versions

 
(17 versions intermédiaires par le même utilisateur non affichées)
Ligne 56 : Ligne 56 :


== Comment fonctionne apiplatform et un sevrveur keycloak ensemble ? ==
== Comment fonctionne apiplatform et un sevrveur keycloak ensemble ? ==
L'intégration d''''API Platform''' et d'un serveur '''Keycloak''' permet de créer une architecture sécurisée où les API sont protégées par un système d'authentification et d'autorisation robuste. Voici comment ces deux technologies fonctionnent ensemble :
L'intégration d''''API Platform''' et d'un serveur '''Keycloak''' permet de créer une architecture sécurisée où les API sont protégées par un système d'authentification et d'autorisation robuste. Voici comment ces deux technologies fonctionnent ensemble :
---
---
=== 1. '''Rôles de chaque composant''' ===  
=== 1. '''Rôles de chaque composant''' ===  
*'''API Platform''' :  
*'''API Platform''' :  
Ligne 68 : Ligne 65 :
:Serveur d'authentification et de gestion des identités.
:Serveur d'authentification et de gestion des identités.
:Gère les utilisateurs, les rôles, les permissions, et délivre des tokens d'accès (JWT) via des protocoles comme OAuth2 et OpenID Connect.
:Gère les utilisateurs, les rôles, les permissions, et délivre des tokens d'accès (JWT) via des protocoles comme OAuth2 et OpenID Connect.
---
----


=== 2. '''Flux d'intégration''' ===  
=== 2. '''Flux d'intégration''' ===  
Voici les étapes clés pour faire fonctionner API Platform et Keycloak ensemble :
Voici les étapes clés pour faire fonctionner API Platform et Keycloak ensemble :
==== a. '''Configuration de Keycloak''' ====
==== a. '''Configuration de Keycloak''' ====
*1. '''Créer un Realm''' :  
*1. '''Créer un Realm''' :  
Ligne 87 : Ligne 83 :
:URL du serveur Keycloak.
:URL du serveur Keycloak.
:Client ID et Client Secret (pour l'authentification côté serveur).
:Client ID et Client Secret (pour l'authentification côté serveur).
==== b. '''Configuration d'API Platform''' ====  
==== b. '''Configuration d'API Platform''' ====  
===== 1. '''Installer un bundle de sécurité''' : =====
===== 1. '''Installer un bundle de sécurité''' : =====
Ligne 104 : Ligne 99 :
     - { path: ^/api, roles: ROLE_USER }
     - { path: ^/api, roles: ROLE_USER }
</syntaxhighlight>
</syntaxhighlight>
===== 3. '''Valider les tokens JWT''' :=====
===== 3. '''Valider les tokens JWT''' :=====
* API Platform valide les tokens JWT reçus dans les requêtes en utilisant la clé publique de Keycloak.
* API Platform valide les tokens JWT reçus dans les requêtes en utilisant la clé publique de Keycloak.
* La clé publique est généralement récupérée depuis l'endpoint `.well-known/jwks.json` de Keycloak.
* La clé publique est généralement récupérée depuis l'endpoint `.well-known/jwks.json` de Keycloak.
==== c. '''Authentification des Utilisateurs''' ====  
==== c. '''Authentification des Utilisateurs''' ====  
*1. '''Flux OAuth2/OpenID Connect''' :
*1. '''Flux OAuth2/OpenID Connect''' :
Ligne 119 : Ligne 112 :
:API Platform valide le token JWT en utilisant la clé publique de Keycloak.
:API Platform valide le token JWT en utilisant la clé publique de Keycloak.
:Si le token est valide, l'utilisateur est authentifié et les rôles/permissions sont extraits du token.
:Si le token est valide, l'utilisateur est authentifié et les rôles/permissions sont extraits du token.
==== d. '''Autorisation''' ====  
==== d. '''Autorisation''' ====  
*Les rôles et permissions contenus dans le token JWT sont utilisés pour restreindre l'accès aux routes ou opérations spécifiques.
*Les rôles et permissions contenus dans le token JWT sont utilisés pour restreindre l'accès aux routes ou opérations spécifiques.
Ligne 135 : Ligne 127 :
}
}
</syntaxhighlight>
</syntaxhighlight>
 
----
---


=== 3. '''Exemple de flux complet''' ===
=== 3. '''Exemple de flux complet''' ===
Ligne 150 : Ligne 141 :
:Si le token est valide et que l'utilisateur a les permissions nécessaires, l'API renvoie les données demandées.
:Si le token est valide et que l'utilisateur a les permissions nécessaires, l'API renvoie les données demandées.
:Sinon, une erreur `401 Unauthorized` ou `403 Forbidden` est renvoyée.
:Sinon, une erreur `401 Unauthorized` ou `403 Forbidden` est renvoyée.
---
----


=== 4. '''Avantages de cette intégration''' ===  
=== 4. '''Avantages de cette intégration''' ===  
Ligne 164 : Ligne 155 :
==== 4. '''Gestion des utilisateurs''' : ====  
==== 4. '''Gestion des utilisateurs''' : ====  
:Keycloak offre une interface pour gérer les utilisateurs, les rôles, et les permissions.
:Keycloak offre une interface pour gérer les utilisateurs, les rôles, et les permissions.
---
----


=== 5. '''Outils et Bibliothèques Utiles''' ===
=== 5. '''Outils et Bibliothèques Utiles''' ===
Ligne 175 : Ligne 166 :
==== 3. '''Keycloak Admin Client''' : ====  
==== 3. '''Keycloak Admin Client''' : ====  
:Pour interagir avec Keycloak programmatiquement (créer des utilisateurs, des rôles, etc.).
:Pour interagir avec Keycloak programmatiquement (créer des utilisateurs, des rôles, etc.).
---
----
 
En résumé, API Platform et Keycloak fonctionnent ensemble en utilisant des tokens JWT pour sécuriser les API.<br />
En résumé, API Platform et Keycloak fonctionnent ensemble en utilisant des tokens JWT pour sécuriser les API.<br />
Keycloak gère l'authentification et l'autorisation, tandis qu'API Platform expose les API et valide les tokens pour garantir un accès sécurisé.
Keycloak gère l'authentification et l'autorisation, tandis qu'API Platform expose les API et valide les tokens pour garantir un accès sécurisé.
Ligne 183 : Ligne 173 :


Lorsque vous utilisez '''API Platform''' avec un serveur '''Keycloak''', il est important de comprendre la différence entre '''ID Token''' et '''Access Token''', car ces deux types de tokens ont des rôles distincts dans le processus d'authentification et d'autorisation. Voici une explication détaillée :
Lorsque vous utilisez '''API Platform''' avec un serveur '''Keycloak''', il est important de comprendre la différence entre '''ID Token''' et '''Access Token''', car ces deux types de tokens ont des rôles distincts dans le processus d'authentification et d'autorisation. Voici une explication détaillée :
 
----
---
 
=== 1. '''Access Token'''===  
=== 1. '''Access Token'''===  
==== a. '''Rôle''' : ====
==== a. '''Rôle''' : ====
Ligne 210 : Ligne 198 :
:1. Authentifier l'utilisateur (vérifier que le token est valide et signé par Keycloak).
:1. Authentifier l'utilisateur (vérifier que le token est valide et signé par Keycloak).
:2. Autoriser l'accès aux routes ou opérations en fonction des rôles ou permissions contenus dans le token.
:2. Autoriser l'accès aux routes ou opérations en fonction des rôles ou permissions contenus dans le token.
 
----
---


===2. '''ID Token'''===
===2. '''ID Token'''===
Ligne 237 : Ligne 224 :
:1. Connaître les informations de l'utilisateur (nom, email, etc.).
:1. Connaître les informations de l'utilisateur (nom, email, etc.).
:2. Maintenir une session utilisateur côté client.
:2. Maintenir une session utilisateur côté client.
---
<hr>


===3. '''Différences clés entre ID Token et Access Token'''===
===3. '''Différences clés entre ID Token et Access Token'''===
{| class="wikitable" style="margin:left"
{| class="wikitable" style="margin:left"
|+ Caption text
|+  
|-
|-
! '''Aspect''' !! '''ID Token''' !! '''Access Token'''  
! '''Aspect''' !! '''ID Token''' !! '''Access Token'''  
Ligne 255 : Ligne 242 :
| '''Utilisation dans API Platform''' || Non utilisé directement. || Utilisé pour l'authentification et l'autorisation.
| '''Utilisation dans API Platform''' || Non utilisé directement. || Utilisé pour l'authentification et l'autorisation.
|}
|}
---
----


===4. '''Flux typique avec API Platform et Keycloak'''===
===4. '''Flux typique avec API Platform et Keycloak'''===
Ligne 269 : Ligne 256 :
:Le client envoie l''''Access Token''' dans l'en-tête `Authorization` des requêtes API.
:Le client envoie l''''Access Token''' dans l'en-tête `Authorization` des requêtes API.
:API Platform valide l''''Access Token''' et vérifie les permissions avant de renvoyer les données.
:API Platform valide l''''Access Token''' et vérifie les permissions avant de renvoyer les données.
 
----
---


===5. '''Exemple concret'''===
===5. '''Exemple concret'''===
Ligne 299 : Ligne 285 :
:API Platform valide l''''Access Token''' en utilisant la clé publique de Keycloak.
:API Platform valide l''''Access Token''' en utilisant la clé publique de Keycloak.
:Si le token est valide et que l'utilisateur a les permissions nécessaires, l'API renvoie les données.
:Si le token est valide et que l'utilisateur a les permissions nécessaires, l'API renvoie les données.
---
----


===6. '''Bonnes pratiques'''===
===6. '''Bonnes pratiques'''===
Ligne 305 : Ligne 291 :
:'''Utiliser HTTPS''' : Pour protéger les tokens lors de leur transmission.
:'''Utiliser HTTPS''' : Pour protéger les tokens lors de leur transmission.
:'''Vérifier les scopes et rôles''' : Assurez-vous que l'Access Token contient les permissions nécessaires pour accéder aux ressources.
:'''Vérifier les scopes et rôles''' : Assurez-vous que l'Access Token contient les permissions nécessaires pour accéder aux ressources.
---
----
 
===7. '''En résumé''' ===
===7. '''En résumé''' ===
l''''ID Token''' est utilisé pour authentifier l'utilisateur côté client, tandis que l''''Access Token''' est utilisé pour accéder aux ressources protégées côté serveur (API Platform).<br />
l''''ID Token''' est utilisé pour authentifier l'utilisateur côté client, tandis que l''''Access Token''' est utilisé pour accéder aux ressources protégées côté serveur (API Platform).<br />
Ligne 313 : Ligne 300 :
=== [[ Mistral_apiplatform_keycloak | Voir les réponses aux mêmes questions posées à Mistral]] ===
=== [[ Mistral_apiplatform_keycloak | Voir les réponses aux mêmes questions posées à Mistral]] ===


[[category:DeepSeek]] [[category:api]]
[[category:DeepSeek]] [[category:api]] [[Catégorie: Apiplatform]] [[category:Keycloak]]