Comment utiliser Keycloak avec Symfony

Keycloak est une solution open-source de gestion des identités et des accès qui fournit des fonctionnalités de sécurité robustes pour les applications web. Si vous êtes un expert en sécurité souhaitant intégrer Keycloak avec Symfony, les étapes suivantes vous guideront tout au long du processus :

Installer le bundle Keycloak

Pour commencer à utiliser Keycloak avec Symfony, vous devez installer le bundle Keycloak. Ce bundle fournit l’intégration nécessaire entre Symfony et Keycloak. Vous pouvez l’installer via Composer en exécutant la commande suivante :

composer require trikoder/oauth2-bundle

Configurer le bundle Keycloak

Une fois le bundle installé, vous devez le configurer pour vous connecter à votre serveur Keycloak. Ouvrez le fichier config/packages/oauth2.yaml et ajoutez la configuration suivante :

oauth2:
resource_owners:
keycloak:
type: keycloak
client_id: YOUR_CLIENT_ID
client_secret: YOUR_CLIENT_SECRET
base_url: https://your-keycloak-server/auth/realms/your-realm
redirect_route: keycloak_auth_redirect
redirect_params: {}
check_path: /keycloak_auth_check
failure_path: /keycloak_auth_failure

Veillez à remplacer YOUR_CLIENT_ID, YOUR_CLIENT_SECRET et https://your-keycloak-server/auth/realms/your-realm par les valeurs appropriées pour votre configuration Keycloak.

Configurer la sécurité Symfony

Ensuite, vous devez configurer le système de sécurité de Symfony pour utiliser Keycloak pour l’authentification. Ouvrez le fichier config/packages/security.yaml et ajoutez la configuration suivante :

security:
providers:
keycloak:
id: trikoder.oauth2.user_provider
firewalls:
main:
anonymous: lazy
oauth:
resource_owners:
keycloak: '/login/check-keycloak'
login_path: /login
use_forward: false
failure_path: /login
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/secured, roles: ROLE_USER }

Implémenter l’authentification Keycloak

Il est maintenant temps d’implémenter l’authentification Keycloak dans votre application Symfony. Créez un nouveau contrôleur, par exemple src/Controller/KeycloakController.php, et ajoutez le code suivant :

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class KeycloakController extends AbstractController
{
/**
* @Route("/login/check-keycloak", name="keycloak_auth_redirect")
*/
public function redirectAction()
{
// Cette action est gérée par le bundle Keycloak
}
/**
* @Route("/login/keycloak", name="keycloak_auth_check")
*/
public function checkAction()
{
// Cette action est gérée par le bundle Keycloak
}
/**
* @Route("/login/keycloak-failure", name="keycloak_auth_failure")
*/
public function failureAction()
{
// Cette action est gérée par le bundle Keycloak
}
}

Ces actions gèreront le processus d’authentification Keycloak et redirigeront l’utilisateur en conséquence.

Protéger les routes avec Keycloak

Enfin, vous pouvez protéger des routes spécifiques dans votre application Symfony en utilisant l’authentification Keycloak. Par exemple, si vous souhaitez protéger la route /secured, ouvrez le contrôleur correspondant et ajoutez l’annotation @Security("is_granted('ROLE_USER')") :

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
class MyController extends AbstractController
{
/**
* @Route("/secured", name="secured_route")
* @Security("is_granted('ROLE_USER')")
*/
public function securedAction()
{
// Cette route est protégée par l'authentification Keycloak
}
}

Grâce à ces étapes, vous avez intégré avec succès Keycloak avec Symfony et ajouté l’authentification à votre application en utilisant les fonctionnalités de sécurité de Keycloak.

N’oubliez pas d’adapter la configuration et les extraits de code selon vos exigences spécifiques et votre configuration Keycloak.