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

Ligne 61 : Ligne 61 :
---
---


#1. '''Rôles de chaque composant'''
=== 1. '''Rôles de chaque composant''' ===
   - '''API Platform''' :  
   - '''API Platform''' :  
     - Framework pour créer et exposer des API RESTful ou GraphQL.
     - Framework pour créer et exposer des API RESTful ou GraphQL.
Ligne 71 : Ligne 71 :
---
---


#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''' : Un realm est un espace isolé dans Keycloak pour gérer les utilisateurs, les rôles, et les clients.
   1. '''Créer un Realm''' : Un realm est un espace isolé dans Keycloak pour gérer les utilisateurs, les rôles, et les clients.
   2. '''Créer un Client''' :  
   2. '''Créer un Client''' :  
Ligne 87 : Ligne 87 :
       - 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''' ====
  1. '''Installer un bundle de sécurité''' :
      - Utiliser un bundle comme `lexik/jwt-authentication-bundle` pour gérer l'authentification JWT.
      - Configurer le bundle pour valider les tokens JWT émis par Keycloak.
  2. '''Configurer la sécurité''' :
      - Dans `security.yaml`, définir les règles de sécurité pour les routes de l'API.
      - Exemple :
        ```yaml
        security:
          firewalls:
            main:
              stateless: true
              jwt: ~
          access_control:
            - { path: ^/api, roles: ROLE_USER }
        ```
  3. '''Valider les tokens JWT''' :
      - 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.
==== c. '''Authentification des Utilisateurs''' ====
  1. '''Flux OAuth2/OpenID Connect''' :
      - L'utilisateur se connecte via Keycloak (par exemple, via un formulaire de connexion ou un bouton "Login with Keycloak").
      - Keycloak renvoie un token JWT après une authentification réussie.
  2. '''Utilisation du token''' :
      - Le client (application frontale ou mobile) envoie le token JWT dans l'en-tête `Authorization` des requêtes API :
        ```
        Authorization: Bearer <JWT_TOKEN>
        ```
  3. '''Vérification du token''' :
      - 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.
==== 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.
  - Exemple :
    ```php
    #[ApiResource(
        operations: [
            new Get(security: "is_granted('ROLE_ADMIN')"),
            new Post(security: "is_granted('ROLE_USER')"),
        ]
    )]
    class Product
    {
        // ...
    }
    ```
---
3. '''Exemple de flux complet'''
1. '''Étape 1 : Authentification'''
  - L'utilisateur se connecte via Keycloak (frontend ou application mobile).
  - Keycloak renvoie un token JWT.
2. '''Étape 2 : Accès à l'API'''
  - Le client envoie une requête à l'API avec le token JWT dans l'en-tête `Authorization`.
  - API Platform valide le token et vérifie les permissions.
3. '''Étape 3 : Réponse'''
  - 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.
---
4. '''Avantages de cette intégration'''
1. '''Sécurité''' :
- Keycloak gère l'authentification de manière centralisée et sécurisée.
2. '''Flexibilité''' :
- API Platform permet de créer des API performantes et modulaires.
3. '''Interopérabilité''' :
- Les protocoles OAuth2 et OpenID Connect sont standardisés et largement supportés.
4. - '''Gestion des utilisateurs''' :
- Keycloak offre une interface pour gérer les utilisateurs, les rôles, et les permissions.
---
5. '''Outils et Bibliothèques Utiles'''
1. '''lexik/jwt-authentication-bundle''' :
- Pour gérer l'authentification JWT dans Symfony (utilisé par API Platform).
2. '''web-token/jwt-framework''' :
- Pour manipuler les tokens JWT.
3. '''Keycloak Admin Client''' :
- 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 />
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é.