8 min
lire
Dans cet article, nous allons explorer OpenID Connect (OIDC) et la façon dont il s'est imposé comme une solution essentielle pour relever les défis de la gestion des identités numériques et de la cybersécurité. Rejoignez-nous pour simplifier l'OIDC, en explorant son fonctionnement, ses avantages et notre retour d'expérience suite à sa mise en œuvre réussie avec nos clients, visant à atténuer les risques associés au partage d'informations d'identification à long terme et à la fuite potentielle d'informations aussi sensibles.
I. Qu'est-ce que l'OIDC ?
OpenID Connect (OIDC) est un protocole d'authentification basé sur la norme OAuth 2.0.
Alors qu'OAuth se concentre sur l'autorisation, OIDC introduit une couche de sécurité supplémentaire en permettant l'authentification. Il permet aux clients[1] d'authentifier les utilisateurs et de recevoir une confirmation de leur identité via un ID Token.
Reconnu pour son approche centrée sur l'utilisateur et sa facilité d'intégration dans les systèmes d'authentification existants, l'OIDC marque une évolution importante dans la gestion des identités numériques, offrant un mécanisme plus sécurisé et standardisé.
Les composants clés sont :
- ID Token: Jeton de sécurité au format JSON contenant l'identité de l'utilisateur et signé par le serveur d'authentification.
- UserInfo Endpoint: Service permettant d'obtenir des informations sur l'utilisateur après une authentification réussie.
- Discovery Document: Un document JSON avec les métadonnées nécessaires pour les interactions client-serveur.
- Dynamic Client Registration: Un processus permettant à un client de s'enregistrer auprès d'un serveur OIDC.
II. Fonctionnement général
Types de "Grants"
L'OIDC permet à un client, tel qu'une application web ou mobile, de vérifier l'identité de l'utilisateur et d'obtenir des informations de base sur son profil par l'intermédiaire d'un serveur d'authentification de confiance. Il utilise différents types de subventions pour faciliter les différents flux d'autorisation.
<span>Un "grant" dans ce contexte se réfère à une méthode ou un mécanisme par lequel une application obtient l'autorisation d'accéder à certaines ressources ou données. Chaque type de grant offre une approche différente pour obtenir cette autorisation, en fonction du contexte et des besoins de sécurité de l'application</span><br>
Les principaux types de grants sont les suivants :
- Authorisation Code Grant: C'est le flux le plus courant, en particulier pour les applications qui peuvent stocker en toute sécurité un secret client. Il implique qu'un serveur d'autorisation émette un code d'autorisation, que le client échange ensuite contre un ID token et un access token.
- Implicit Grant: Conçu pour les applications où le client ne peut pas stocker en toute sécurité un secret client, comme les applications mono-page (SPAs). Ce flux renvoie un ID token et/ou un access token directement après que l'utilisateur se soit authentifié, sans code d'autorisation intermédiaire.
- Client Credentials Grant: Utilisé pour la communication serveur-à-serveur où le client agit en son propre nom, et non au nom d'un utilisateur. Il est typiquement utilisé pour les services backend ou les daemons.
- Device code grant: Applicable aux appareils qui n'ont pas de moyen facile d'entrer du texte, comme les smart TVs ou les appareils IoT. Ce flux implique qu'un appareil affiche un code que l'utilisateur saisit dans un autre appareil disposant de meilleures capacités de saisie.
- Refresh Token Grant: Permet à un client d'obtenir de nouveaux access tokens sans avoir à se ré-authentifier, en utilisant un refresh token qui est émis avec les access et ID tokens.
Ces types de grants permettent différents scénarios d'authentification et d'autorisation des utilisateurs, répondant à une variété de types d'applications et d'exigences de sécurité.
Tokens
L'OIDC utilise des tokens pour faciliter l'authentification et l'autorisation dans les applications et services. Les principaux tokens sont des jetons d'identification (ID Token) et d'accès (Access Token) :
- ID Token : Un JWT (JSON Web Token) contenant les informations d'identité de l'utilisateur, signé numériquement par le serveur d'authentification.
- Acess Token : Utilisé pour accéder aux ressources protégées sur le serveur de ressources, telles que les API.
Voici un exemple d'un token OIDC au format JSON :
Ce token comprend des champs standard tels que l'émetteur (iss), le sujet (sub), l'audience (aud), l'heure d'expiration (exp) et l'heure d'émission (iat), ainsi que des informations spécifiques à l'utilisateur telles que le nom et l'adresse électronique.
Découverte (Discovery)
OIDC (OpenID Connect) offre un mécanisme de découverte, une fonctionnalité essentielle pour faciliter l'interaction automatique entre les clients (comme les applications web ou mobiles) et le serveur d'authentification.
Voici quelques points clés de ce mécanisme de découverte de l'OIDC :
- Discovery Endpoint : Permet la récupération automatique de la configuration du serveur OIDC via un point d'accès standardisé.
- Récupération des métadonnées : Obtient automatiquement les URL et les configurations du serveur OIDC pour simplifier l'intégration du client.
- Clés publiques : Fournit les clés publiques du serveur pour la vérification sécurisée des signatures des tokens.
Sécurité et validation des tokens
La sécurité de l'OIDC est assurée par des mécanismes rigoureux de validation des tokens. Les clients [1] doivent non seulement vérifier la signature des tokens, mais aussi s'assurer que le token est destiné à leur utilisation (en vérifiant le champ aud du token), que l'utilisateur est bien celui indiqué dans le token (en vérifiant le champ sub du token) et que le token n'a pas expiré (champs exp).
Exemple : Flux d'authentification OIDC entre GitHub Actions et AWS
Dans le contexte de l'intégration entre GitHub Actions et AWS via OIDC, le "Client Credentials Grant" est un mécanisme par lequel GitHub Actions s'authentifie auprès d'AWS en tant que client. Cela permet à GitHub Actions d'obtenir des identifiants AWS temporaires pour accéder aux ressources nécessaires sans avoir à stocker de manière permanente des clés d'accès AWS (à long terme) dans les configurations GitHub.
- Déclenchement d'un pipeline GitHub : Lorsqu'un pipeline GitHub est déclenché, GitHub récupère les informations d'identification à l'aide de l'action aws-actions/configure-aws-credentials. Cette action nécessite le paramètre role-to-assume. Elle met en œuvre la chaîne de résolution des informations d'identification du SDK AWS.
- Demande d'identifiants à AWS IAM : La demande d'identifiant arrive chez le fournisseur d'identité d'AWS IAM. Ce fournisseur fait confiance à GitHub via des certificats, établissant ainsi une relation de fédération entre GitHub et AWS[source].
- Autorisation et attribution d'identifiants temporaires : Si autorisé, GitHub reçoit en retour des clés d'accès et un ID temporaires et peut alors assumer le rôle spécifié dans role-to-assume. GitHub Actions peut accéder aux ressources AWS nécessaires selon les permissions définies dans le rôle IAM[source].
III. Avantages
1. Authentification sans mot de passe
L'intégration d'OIDC marque un tournant vers une authentification sans mot de passe, privilégiant une sécurité accrue et une meilleure expérience utilisateur. Les mots de passe, souvent susceptibles d'être compromis, cèdent la place aux tokens d'authentification et aux assertions d'identité qu'OIDC utilise pour une expérience utilisateur plus sûre et transparente.
2. La sécurité
L'impact sur la sécurité des systèmes informatiques est important :
- Centralisation de la gestion des identités : L'OIDC centralise la gestion de l'identité, réduisant ainsi la complexité et les risques associés à la gestion de multiples systèmes d'authentification.
- Délégation de l'authentification : En déléguant l'authentification à des fournisseurs de services de confiance, les organisations limitent les risques de failles de sécurité internes.
- Tokens à durée de vie limitée : L'utilisation de tokens temporaires diminue le risque de compromission à long terme des identifiants, car même si un token est intercepté, il ne sera valide que pour une courte période.
3. Réglementations
L'adoption d'OpenID Connect (OIDC) aide les entreprises à se conformer aux réglementations en matière de protection des données, telles que le GDPR, de deux manières principales :
- Réduction de la gestion des données d'identité : OIDC diminue la nécessité de stocker et de gérer des données d'identité sensibles, alignant les pratiques avec les principes de minimisation des données du RGPD.
- Sécurité des données renforcée : En utilisant des tokens sécurisés et une authentification robuste, OIDC renforce la protection des données personnelles, un aspect clé de la conformité au RGPD.
4. Gestion centralisée des identités
L'adoption d'OpenID Connect (OIDC) offre une approche centralisée de la gestion des identités au sein des entreprises. Cela simplifie la gestion des utilisateurs en réduisant la complexité inhérente à la gestion de multiples systèmes d'authentification. De plus, en déléguant l'authentification à des fournisseurs de services de confiance, les organisations minimisent les risques de failles de sécurité internes.
5. L'intégration
Outre les avantages déjà mentionnés de l'intégration de l'OIDC, voici d'autres points avantageux à prendre en considération :
- Amélioration de l'interopérabilité : Facilite l'intégration avec divers systèmes et technologies grâce à des standards ouverts, améliorant la compatibilité inter-plateformes.
- Prise en charge des flux d'authentification modernes : Prend en charge des méthodes d'authentification avancées comme l'authentification mobile et biométrique.
- Mises à jour de sécurité simplifiées : Centralisation des mises à jour de la politique de sécurité et des certificats, ce qui réduit les efforts de maintenance.
- Accès basé sur les rôles et permissions (policy) : Facilite l'implémentation de contrôles d'accès sophistiqués pour une gestion fine des autorisations.
- Traçabilité et audit améliorés : Améliore la traçabilité des authentifications et facilite les audits, essentiels pour la conformité et la gestion des risques.
- Réduction de la surface d'attaque: Minimise les points d'entrée pour les attaques potentielles, améliorant ainsi la sécurité globale de l'organisation.
En résumé, l'OIDC contribue à une architecture de sécurité plus robuste, plus sûre et plus facile à gérer dans les systèmes informatiques modernes.
IV. Retour d'expérience
L'intégration d'AWS et de GitHub via OIDC est un cas d'usage courant visant à automatiser et à sécuriser le déploiement d'applications dans le cloud AWS depuis les pipelines CI/CD de GitHub Actions.
Setup
1. Configuration d'OIDC sur AWS :
- Création d'un fournisseur d'identité OIDC en AWS IAM, lié à GitHub.
- Configuration des rôles IAM avec des politiques permettant l'accès aux ressources AWS nécessaires.
2. Configuration des GitHub Actions :
- Mise en place de flux d'actions GitHub pour l'intégration avec AWS.
- Utilisation de l'authentification OIDC pour obtenir des credentials temporaires AWS.
La configuration initiale de l'intégration entre AWS et GitHub est relativement simple. Néanmoins, la partie la plus critique et complexe concerne la configuration appropriée des rôles IAM. Il est essentiel de définir précisément la condition token.actions.githubusercontent.com:sub pour limiter spécifiquement les organisations, dépôts ou branches GitHub qui peuvent assumer ce rôle. Cette configuration est essentielle pour garantir une sécurité adéquate.
En ce qui concerne la configuration des GitHub Actions, la mise en place des permissions est simple :
Source : Configuration d'OpenID Connect dans Amazon Web Services - GitHub Docs
V. Conclusion
OIDC est un choix stratégique pour les entreprises qui souhaitent renforcer la sécurité de leurs infrastructures informatiques. C'est une solution complète qui intègre à la fois l'authentification et l'autorisation, <span>et facilite ainsi le développement d'applications sécurisées et respectueuses des réglementations en vigueur comme le RGPD.</span>
Les principaux avantages de l'OIDC sont les suivants:
- La gestion centralisée de l'identité,
- l'authentification sans mot de passe,
- Une sécurité renforcée,
- L'intégration facile avec des systèmes tels que GitHub Actions ou Terraform Cloud pour des déploiements sécurisés dans le cloud,
- Une expérience utilisateur simplifiée.
Lexique
[1] Un client OIDC (OpenID Connect) est une application ou un service qui interagit avec un fournisseur d'identité (IDP) en utilisant le protocole OIDC pour authentifier les utilisateurs.
[2] Un fournisseur d'identité (Identity Provider) est un système ou un service qui authentifie les utilisateurs et fournit des informations d'identification aux applications et aux services.