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

Authentification

Note

Cette page suppose que vous avez déjà un Fournisseur d'Identité (IdP), tel que Google, Entra ID (anciennement Azure AD) ou Okta, qui gère le processus d'authentification et retourne un jeton d'accès.

Apprenez comment vous pouvez permettre aux utilisateurs de s'authentifier depuis votre extension en utilisant OAuth 2.0 via un navigateur web, et de revenir à votre extension.

Dans OAuth 2.0, le terme "type de grant" fait référence à la façon dont une application obtient un jeton d'accès. Bien qu'OAuth 2.0 définisse plusieurs types de grant, cette page décrit uniquement comment autoriser les utilisateurs depuis votre extension en utilisant le type de grant Authorization Code.

Flux de grant par code d'autorisation

Le type de grant Authorization Code est utilisé par les clients confidentiels et publics pour échanger un code d'autorisation contre un jeton d'accès.

Après que l'utilisateur revient au client via l'URL de redirection, l'application obtient le code d'autorisation depuis l'URL et l'utilise pour demander un jeton d'accès.

Flux pour OAuth 2.0

L'image ci-dessus montre que :

  • L'extension Docker demande à l'utilisateur d'autoriser l'accès à ses données.
  • Si l'utilisateur accorde l'accès, l'extension demande alors un jeton d'accès au fournisseur de service, en passant le grant d'accès de l'utilisateur et les détails d'authentification pour identifier le client.
  • Le fournisseur de service valide alors ces détails et retourne un jeton d'accès.
  • L'extension utilise le jeton d'accès pour demander les données utilisateur auprès du fournisseur de service.

Terminologie OAuth 2.0

  • Auth URL : Le point de terminaison pour le serveur d'autorisation du fournisseur d'API, pour récupérer le code d'authentification.
  • Redirect URI : L'URL de callback de l'application client vers laquelle rediriger après l'authentification. Cela doit être enregistré auprès du fournisseur d'API.

Une fois que l'utilisateur saisit le nom d'utilisateur et le mot de passe, il est authentifié avec succès.

Ouvrir une page de navigateur pour authentifier l'utilisateur

Depuis l'interface utilisateur de l'extension, vous pouvez fournir un bouton qui, lorsqu'il est sélectionné, ouvre une nouvelle fenêtre dans un navigateur pour authentifier l'utilisateur.

Utilisez l'API ddClient.host.openExternal pour ouvrir un navigateur vers l'URL d'authentification. Par exemple :

window.ddClient.openExternal("https://authorization-server.com/authorize?
  response_type=code
  &client_id=T70hJ3ls5VTYG8ylX3CZsfIu
  &redirect_uri=${REDIRECT_URI});

Obtenir le code d'autorisation et le jeton d'accès

Vous pouvez obtenir le code d'autorisation depuis l'interface utilisateur de l'extension en listant docker-desktop://dashboard/extension-tab?extensionId=awesome/my-extension comme redirect_uri dans l'application OAuth que vous utilisez et en concaténant le code d'autorisation comme paramètre de requête. Le code de l'interface utilisateur de l'extension pourra alors lire le paramètre de requête de code correspondant.

Important

Utiliser cette fonctionnalité nécessite le SDK d'extension 0.3.3 dans Docker Desktop. Vous devez vous assurer que la version de SDK requise pour votre extension définie avec com.docker.desktop.extension.api.version dans les labels d'image est supérieure à 0.3.3.

Autorisation

Cette étape est celle où l'utilisateur saisit ses identifiants dans le navigateur. Après que l'autorisation soit terminée, l'utilisateur est redirigé vers l'interface utilisateur de votre extension, et le code de l'interface utilisateur de l'extension peut consommer le code d'autorisation qui fait partie des paramètres de requête dans l'URL.

Échanger le Code d'Autorisation

Ensuite, vous échangez le code d'autorisation contre un jeton d'accès.

L'extension doit envoyer une requête POST au serveur d'autorisation OAuth avec les paramètres suivants :

POST https://authorization-server.com/token
&client_id=T70hJ3ls5VTYG8ylX3CZsfIu
&client_secret=YABbyHQShPeO1T3NDQZP8q5m3Jpb_UPNmIzqhLDCScSnRyVG
&redirect_uri=${REDIRECT_URI}
&code=N949tDLuf9ai_DaOKyuFBXStCNMQzuQbtC1QbvLv-AXqPJ_f
Note

Les identifiants du client sont inclus dans les paramètres de requête POST dans cet exemple. Les serveurs d'autorisation OAuth peuvent exiger que les identifiants soient envoyés comme en-tête d'Authentification HTTP Basic ou peuvent supporter différents formats. Voir la documentation de votre fournisseur OAuth pour les détails.

Stocker le jeton d'accès

Le SDK des Extensions Docker ne fournit pas de mécanisme spécifique pour stocker les secrets.

Il est fortement recommandé d'utiliser une source de stockage externe pour stocker le jeton d'accès.

Note

Le Stockage Local de l'interface utilisateur est isolé entre les extensions (une extension ne peut pas accéder au stockage local d'une autre extension), et le stockage local de chaque extension est supprimé lorsque les utilisateurs désinstallent une extension.

Et maintenant

Apprenez comment publier et distribuer votre extension