« DeepSeek apiplatform keycloak » : différence entre les versions
| Ligne 61 : | Ligne 61 : | ||
--- | --- | ||
=== 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''' === | |||
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''' ==== | |||
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é. | |||