⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Simuler les services OAuth en test avec Dex

Dex est un fournisseur d'identité open-source OpenID Connect (OIDC) et OAuth 2.0 qui peut être configuré pour s'authentifier auprès de divers fournisseurs d'identité back-end, tels que LDAP, SAML et OAuth. L'exécution de Dex dans un conteneur Docker permet aux développeurs de simuler un serveur OAuth 2.0 à des fins de test et de développement. Ce guide vous expliquera comment configurer Dex en tant que serveur de simulation OAuth à l'aide de conteneurs Docker.

De nos jours, OAuth est le choix préféré pour s'authentifier dans les services web, la plupart d'entre eux offrant la possibilité d'accéder en utilisant des services OAuth populaires comme GitHub, Google ou Apple. L'utilisation d'OAuth garantit un niveau de sécurité et de simplification plus élevé car il n'est pas nécessaire de créer de nouveaux profils pour chaque service. Cela signifie qu'en permettant aux applications d'accéder aux ressources au nom des utilisateurs sans partager les mots de passe, OAuth minimise le risque d'exposition des informations d'identification.

Dans ce guide, vous apprendrez à :

  • Utiliser Docker pour lancer un conteneur Dex.
  • Utiliser la simulation OAuth dans GitHub Action (GHA) sans dépendre d'un fournisseur OAuth externe.

Utiliser Dex avec Docker

L'image Docker officielle pour Dex fournit un moyen pratique de déployer et de gérer les instances Dex. Dex est disponible pour diverses architectures de processeur, y compris amd64, armv7 et arm64, garantissant la compatibilité avec différents appareils et plates-formes. Vous pouvez en savoir plus sur Dex autonome sur le site de documentation Dex.

Prérequis

Docker Compose : Recommandé pour la gestion d'applications Docker multi-conteneurs.

Configurer Dex avec Docker

Commencez par créer un répertoire pour votre projet Dex :

mkdir dex-mock-server
cd dex-mock-server

Organisez votre projet avec la structure suivante :

dex-mock-server/
├── config.yaml
└── compose.yaml

Créez le fichier de configuration Dex : Le fichier config.yaml définit les paramètres de Dex, y compris les connecteurs, les clients et le stockage. Pour une configuration de serveur de simulation, vous pouvez utiliser la configuration minimale suivante :

# config.yaml
issuer: http://localhost:5556/dex
storage:
  type: memory
web:
  http: 0.0.0.0:5556
staticClients:
  - id: example-app
    redirectURIs:
      - 'http://localhost:5555/callback'
    name: 'Example App'
    secret: ZXhhbXBsZS1hcHAtc2VjcmV0
enablePasswordDB: true
staticPasswords:
  - email: "[email protected]"
    hash: "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W"
    username: "admin"
    userID: "1234"

Explication :

  • issuer : L'URL publique de Dex.

  • storage : Utilisation du stockage en mémoire pour plus de simplicité.

  • web : Dex écoutera sur le port 5556.

  • staticClients : Définit une application cliente (example-app) avec son URI de redirection et son secret.

  • enablePasswordDB : Active l'authentification par mot de passe statique.

  • staticPasswords : Définit un utilisateur statique pour l'authentification. Le hachage est un hachage bcrypt du mot de passe.

Note

Assurez-vous que le hachage est un hachage bcrypt valide de votre mot de passe souhaité. Vous pouvez le générer à l'aide d'outils comme bcrypt-generator.com. ou utiliser des outils CLI comme htpasswd comme dans l'exemple suivant : echo password | htpasswd -BinC 10 admin | cut -d: -f2

Avec Docker Compose configuré, démarrez Dex :

# docker-compose.yaml

services:
  dex:
    image: dexidp/dex:latest
    container_name: dex
    ports:
      - "5556:5556"
    volumes:
      - ./config.yaml:/etc/dex/config.yaml
    command: ["dex", "serve", "/etc/dex/config.yaml"]

Il est maintenant possible d'exécuter le conteneur en utilisant la commande docker compose.

docker compose up -d

Cette commande téléchargera l'image Docker de Dex (si elle n'est pas déjà disponible) et démarrera le conteneur en mode détaché.

Pour vérifier que Dex est en cours d'exécution, consultez les journaux pour vous assurer que Dex a démarré avec succès :

docker compose logs -f dex

Vous devriez voir une sortie indiquant que Dex écoute sur le port spécifié.

Utiliser le test OAuth de Dex dans GHA

Pour tester le flux OAuth, vous aurez besoin d'une application cliente configurée pour s'authentifier auprès de Dex. L'un des cas d'utilisation les plus typiques est de l'utiliser dans les actions GitHub. Comme Dex prend en charge l'authentification simulée, vous pouvez prédéfinir des utilisateurs de test comme suggéré dans la documentation. Le fichier config.yaml devrait ressembler à :

issuer: http://127.0.0.1:5556/dex

storage:
  type: memory

web:
  http: 0.0.0.0:5556

oauth2:
  skipApprovalScreen: true

staticClients:
  - name: TestClient
    id: client_test_id
    secret: client_test_secret
    redirectURIs:
      - http://{ip-your-app}/path/to/callback/ # exemple: http://localhost:5555/callback

connectors:
# Le connecteur mockCallback renvoie toujours l'utilisateur '[email protected]'.
- type: mockCallback
  id: mock
  name: Mock

Vous pouvez maintenant insérer le service Dex dans votre fichier ~/.github/workflows/ci.yaml :

[...]
jobs:
  test-oauth:
    runs-on: ubuntu-latest
    steps:
      - name: Install Dex
        run: |
          curl -L https://github.com/dexidp/dex/releases/download/v2.37.0/dex_linux_amd64 -o dex
          chmod +x dex

      - name: Start Dex Server
        run: |
          nohup ./dex serve config.yaml > dex.log 2>&1 &
          sleep 5  # Donner à Dex le temps de démarrer
[...]

Conclusion

En suivant ce guide, vous avez configuré Dex en tant que serveur de simulation OAuth à l'aide de Docker. Cette configuration est inestimable pour les tests et le développement, vous permettant de simuler les flux OAuth sans dépendre de fournisseurs d'identité externes. Pour des configurations et des intégrations plus avancées, reportez-vous à la documentation de Dex.