---
title: 'Authentification OAuth 2 avec Discord et Symfony'
description: 'Authentification OAuth 2 avec Discord dans Symfony : configuration du portail développeur, scopes identify/email, URL de callback et récupération du jeton.'
pubDate: 2022-08-04
family: 'javascript-frontend'
tags: []
heroImage: '/images/authentification-oauth-2-avec-discord-et-symfony.webp'
videoUrl: 'https://youtu.be/g0_hcRxomNU'
---

Discord propose une API OAuth 2 complète qui permet d'intégrer son système d'authentification dans n'importe quelle application web. Dans cette vidéo, nous connectons Symfony à l'API Discord pour permettre aux utilisateurs de se connecter avec leur compte Discord.

## Configurer l'application sur le portail développeur Discord

La première étape consiste à créer une application sur le [portail développeur Discord](https://discord.com/developers). Depuis le tableau de bord :

1. Cliquer sur « New Application » et lui donner un nom
2. Dans la section **OAuth2**, récupérer le **Client ID** et le **Client Secret**
3. Ajouter l'URL de redirection : `http://127.0.0.1:8000/discord/check`

Les **scopes** à activer sont `identify` (informations de base du compte) et `email` (adresse email de l'utilisateur Discord).

## Créer le projet Symfony

```bash
symfony new discord-auth --webapp
```

Créer ensuite un fichier `.env.local` (non commité) avec les identifiants Discord :

```env
DISCORD_CLIENT_ID=votre_client_id
DISCORD_CLIENT_SECRET=votre_client_secret
```

## Construire l'URL d'autorisation Discord

```
https://discord.com/oauth2/authorize
  ?client_id=CLIENT_ID
  &redirect_uri=http%3A%2F%2F127.0.0.1%3A8000%2Fdiscord%2Fcheck
  &response_type=code
  &scope=identify+email
```

Quand l'utilisateur clique sur « Se connecter avec Discord », il est redirigé vers cette URL, s'authentifie, puis Discord le redirige vers notre application avec un code d'autorisation.

## Récupérer le jeton et les informations utilisateur

Dans le contrôleur Symfony, la route `/discord/check` reçoit le `code` en paramètre GET. On échange ce code contre un access token via une requête POST à l'API Discord (`/oauth2/token`), puis on récupère les informations de l'utilisateur avec le token obtenu (`/users/@me`).

## Pour aller plus loin

Ce système peut être étendu avec Symfony Security pour créer ou mettre à jour automatiquement l'utilisateur en base de données lors de chaque connexion. Retrouvez la démo complète sur [YouTube](https://youtu.be/g0_hcRxomNU).
