Capacité

Fédération OIDC / OAuth 2.0

Un relying party OpenID Connect complet à la périphérie d'accès — jetons d'identité vérifiés, flux à l'épreuve du rejeu et routage IdP par tenant.

Les IdP modernes, d'entreprise comme grand public — Entra ID, Okta, Auth0, Google Workspace, GitHub, Keycloak — parlent OpenID Connect sur OAuth 2.0. Pour les nouvelles applications, la bonne approche n'est pas de maintenir une base d'utilisateurs parallèle ; c'est de se connecter directement à ces IdP. TR7 AAM se comporte comme un relying party OIDC conforme aux standards devant l'application. Le flux de code d'autorisation démarre avec PKCE, nonce et un state lié à la session ; l'utilisateur se connecte à l'IdP avec la MFA et la politique appliquées par cet IdP ; l'IdP renvoie un code d'autorisation à AAM ; AAM échange le code contre des jetons, récupère le JWKS de l'IdP et vérifie la signature, l'audience, l'issuer, la fenêtre de validité et le nonce du jeton d'identité (ID token) avant d'en extraire l'identité. Les revendications vérifiées de l'ID token sont fusionnées avec la réponse de l'endpoint userinfo et mappées vers l'identifiant de session canonique d'AAM. Une seule passerelle AAM peut router simultanément différentes applications vers différents IdP, et différents tenants de la même application vers différents IdP. Résultat : le reste du moteur d'accès — accès conditionnel, confiance de l'appareil, MFA en périphérie, SSO Backend — repose sur la session OIDC. Chaque étape est auditée ; les résultats de la vérification de l'ID token (signature, nonce, audience, issuer, validité) sont des événements d'audit de premier ordre ; ainsi l'équipe sécurité peut répondre à la question « qui s'est connecté via quel IdP avec quel résultat » depuis un seul flux.

OIDC + OAuth 2.0
Relying party conforme aux standards — code d'autorisation, PKCE, ID tokens vérifiés via JWKS, défenses nonce et state.
S256 PKCE
Méthode code-challenge par défaut — les codes interceptés ne peuvent pas être échangés par l'attaquant.
Cache JWKS partagé
TTL d'une heure entre les processus workers et les instances de passerelle ; rafraîchissement sur miss pour la rotation des clés de l'IdP.

OIDC paraît simple de l'extérieur — intégré par application, il est plein de pièges

OpenID Connect, construit sur OAuth 2.0, est le protocole d'identité fédérée dominant pour les stacks modernes. Chaque grand IdP d'entreprise le prend en charge ; chaque IdP cloud pour la main-d'œuvre le propose ; chaque framework applicatif moderne fournit une bibliothèque pour cela. La partie réputée facile consiste à supposer que quelques lignes de code SDK par application suffisent.

En pratique, un relying party OIDC qui transporte du vrai trafic de production a une longue liste de points à faire correctement. La signature de l'ID token doit être vérifiée contre le JWKS publié par l'IdP, en sélectionnant la bonne clé via le kid, et le cache doit être rafraîchi lorsque l'IdP effectue une rotation de clés. La revendication audience doit correspondre à l'ID client configuré. L'issuer doit correspondre à l'issuer attendu configuré. La durée de validité doit être contrôlée avec une tolérance de dérive d'horloge limitée. Le nonce contenu dans l'ID token doit correspondre au nonce envoyé par AAM dans la requête d'autorisation — s'il ne correspond pas, ce n'est pas une erreur d'analyse, c'est une tentative de rejeu.

La couche OAuth 2.0 sous-jacente a ses propres pièges. Le state doit être lié à la session de l'utilisateur comme protection CSRF et avoir un TTL court. PKCE doit être utilisé (de préférence S256), afin qu'un code d'autorisation intercepté ne puisse pas être échangé par l'attaquant. Les attaques de mixup — où l'attaquant trompe le relying party pour qu'il parle au mauvais IdP — sont déjouées en liant le callback à un IdP spécifique et en vérifiant l'issuer en conséquence. Dans une intégration SDK naïve, aucune de ces défenses n'est automatique.

Une autre forme d'échec consiste à embarquer le SDK OIDC directement dans chaque application. Chaque application porte alors séparément ses propres décisions de confiance, son cache JWKS, ses journaux d'audit et sa configuration IdP. Un seul changement d'IdP devient un déploiement coordonné multi-applications. La MFA, l'accès conditionnel, la confiance de l'appareil et le comportement de déconnexion sont résolus à nouveau séparément pour chaque application, souvent de manière incohérente.

Le côté opérationnel est tout aussi important. La mise à jour du document de discovery de l'IdP, la gestion de la rotation des clés de signature, le routage IdP différent par tenant, les mappings de revendications différents pour différentes applications et les flux de déconnexion ne sont pas de petits détails ajoutés après coup. Ce sont des éléments fondamentaux pour que la fédération OIDC fonctionne de manière sûre et durable.

Le bon endroit est la périphérie d'accès. OIDC doit être vérifié en un seul point ; il doit être géré dans la même couche que l'authentification, la MFA, l'accès conditionnel, la confiance de l'appareil et le SSO Backend. Ainsi les applications ne portent pas la complexité du protocole de fédération ; elles reçoivent seulement une identité vérifiée, propre et fiable.

Bien gérer OIDC ne se résume pas à se connecter à un IdP avec un SDK. Il s'agit de vérifier, d'auditer l'ID token en un seul point — dans le même moteur que la MFA, l'accès conditionnel, la confiance de l'appareil et le SSO Backend — de manière conforme aux standards, et de le transmettre en toute sécurité aux applications.

Notre approche

Une seule passerelle AAM termine OIDC correctement à la périphérie ; le reste du moteur d'accès repose dessus.

Relying party OpenID Connect complet plus client OAuth 2.0

Flux de code d'autorisation avec PKCE, vérification de la signature de l'ID token via JWKS, défense contre le rejeu liée au nonce, défense CSRF liée au state, application de l'audience/issuer/validité. Le même moteur parle OAuth 2.0 simple pour les IdP qui ne fournissent pas d'ID token ; ainsi les fournisseurs qui ne livrent que des jetons et les fournisseurs OIDC complets partagent une seule base de code.

Routage IdP par application et par tenant

Une seule passerelle AAM peut router simultanément différentes applications vers différents IdP, et différents tenants de la même application vers différents IdP. La sélection de l'IdP se fait par requête à partir du contexte de l'application ou du tenant — pas de passerelle distincte par IdP, pas de sélecteur manuel pour l'utilisateur.

Rejeu, CSRF et attaques de mixup déjoués par défaut

Le nonce lie l'ID token à la requête d'autorisation qui l'a demandé ; le state lie le callback à la session de l'utilisateur ; PKCE lie l'échange de code au client public d'origine. Aucun de ces éléments n'est un drapeau optionnel que l'intégrateur pourrait oublier — c'est le flux par défaut lui-même.

Coordonné avec MFA, accès conditionnel, confiance de l'appareil et SSO Backend

Une authentification OIDC ne fonctionne pas seule — elle est composée avec la MFA en périphérie (si l'IdP n'a pas appliqué de step-up), les expressions d'accès conditionnel, l'évaluation continue de la confiance et l'injection SSO Backend vers le backend. L'ID token devient une entrée de la session AAM ; il ne devient pas toute la session.

Capacités

Un relying party OIDC conforme aux standards, plus les fonctionnalités opérationnelles qui rendent la fédération sûre et gérable à grande échelle.

Flux de code d'autorisation avec PKCE (S256 par défaut)

AAM démarre le flux de code d'autorisation OAuth 2.0 avec PKCE activé par défaut — code_challenge_method=S256, un code_verifier frais pour chaque requête, jamais réutilisé. Un attaquant qui ne génère pas le verifier ne peut pas échanger un code d'autorisation intercepté contre des jetons. Le PKCE simple reste disponible pour les IdP qui l'imposent ; S256 est la valeur par défaut configurée.

Vérification de la signature de l'ID token contre le JWKS de l'IdP

À l'arrivée du callback, AAM récupère le JWKS de l'IdP, sélectionne la clé de signature à partir de l'en-tête kid de l'ID token et vérifie la signature de l'ID token avec l'algorithme indiqué dans l'en-tête (RS256 et le reste de la famille standard). Un cache miss sur le kid rafraîchit immédiatement le JWKS ; ainsi une rotation de clés de l'IdP ne bloque pas les connexions valides.

Audience, issuer, validité et nonce — pas seulement analysés, appliqués

La revendication audience de l'ID token doit contenir l'ID client configuré ; l'issuer doit correspondre à l'issuer attendu configuré ; la fenêtre de validité (exp/nbf) est appliquée avec une tolérance de dérive d'horloge limitée ; le nonce doit correspondre au nonce envoyé par AAM dans la requête d'autorisation. Une non-concordance du nonce est traitée non pas comme une erreur d'analyse, mais comme un signal de rejeu avec son propre événement d'audit.

Cache JWKS partagé avec rafraîchissement sur miss pour la rotation des clés

Les réponses JWKS sont mises en cache avec un TTL d'une heure dans un magasin partagé entre les processus workers et les instances de passerelle. Un cache hit élimine l'aller-retour réseau à chaque connexion ; un cache miss sur le kid demandé déclenche un rafraîchissement instantané depuis l'URI JWKS ; ainsi la rotation de routine des clés de l'IdP ne produit pas d'interruption de connexion.

Paramètres OIDC : scope, display, max_age, ui_locales, acr_values

Les paramètres d'autorisation OIDC standard sont une configuration de premier ordre : scope (openid ajouté automatiquement), display pour l'expérience de connexion à l'IdP, max_age pour la réauthentification forcée, ui_locales pour les pages IdP localisées et acr_values pour demander une classe de contexte d'authentification spécifique — utile pour demander à l'IdP d'appliquer une MFA step-up.

Profils de fournisseurs intégrés plus IdP entièrement personnalisés

Les profils intégrés sont fournis avec des valeurs par défaut raisonnables pour les fournisseurs courants (endpoints well-known, URI JWKS, habitudes de scope). Le chemin IdP personnalisé, où les endpoints, les scopes et les mappings sont saisis manuellement, reste disponible pour tout fournisseur OIDC ou OAuth 2.0 conforme aux standards.

Les revendications de l'ID token sont fusionnées avec userinfo ; les revendications signées priment

Après la vérification de la signature, les revendications de l'ID token sont fusionnées avec la réponse de l'endpoint userinfo de l'IdP. En cas de conflit, les revendications signées de l'ID token sont considérées comme prioritaires sur les champs userinfo non signés ; ainsi un attaquant qui altère la réponse userinfo ne peut pas modifier silencieusement une revendication d'identité signée.

Feuille de route — RP-Initiated Logout, déconnexion back-channel, enregistrement dynamique de client

Le RP-Initiated Logout (déconnexion front-channel signée de la spéc OIDC) et la déconnexion back-channel pour les notifications de fin de session depuis l'IdP sont sur la feuille de route. L'enregistrement dynamique de client OIDC — mettre en service une nouvelle application en l'enregistrant automatiquement auprès de l'IdP — est également planifié. L'infrastructure de session et d'audit est déjà conçue pour prendre en charge ces flux.

Profondeur opérationnelle

Les mécanismes qui maintiennent une fédération OIDC sûre, à jour et observable.

01

Liaison du state avec TTL de 10 minutes et contrôle de session

Le paramètre OAuth state est stocké contre la session de l'utilisateur avec un TTL de 10 minutes. À l'arrivée du callback, AAM vérifie que le state appartient à la même session qui a démarré le flux — un attaquant qui rejoue une valeur de state dans le navigateur d'un autre utilisateur est rejeté avec un événement d'audit OAUTH_STATE_MISMATCH.

02

Audit à chaque saut de vérification d'ID token — par cause racine

Lorsque la vérification de la signature de l'ID token est sautée pour une raison opérationnelle — JWKS inaccessible, aucun kid correspondant, JWK corrompu, URI JWKS manquant — un événement d'audit dédié enregistre la cause racine spécifique. Les opérateurs peuvent distinguer une panne temporaire du JWKS d'une mauvaise configuration ou d'un type de clé non pris en charge sans relire les journaux d'exécution.

03

Tolérance de dérive d'horloge limitée par IdP

Les ID tokens portent des horodatages iat, nbf et exp. Les vraies horloges dérivent ; AAM applique une tolérance de dérive d'horloge limitée (60 secondes par défaut pour le validateur JWT sous-jacent) ; ainsi une petite dérive ne rejette pas les connexions valides, tandis qu'une grande dérive — indicateur de mauvaise configuration ou de rejeu — est tout de même rejetée.

04

Échange de jetons et userinfo avec délais d'attente réseau durcis

L'échange de jetons et les requêtes userinfo vers l'IdP utilisent des délais d'attente limités pour la connexion, le DNS et la durée totale ; ainsi un IdP lent ou non réactif ne peut pas occuper les workers de la passerelle. L'échange de jetons fonctionne avec un budget total de 30 secondes ; userinfo fonctionne avec un budget de 15 secondes ; les budgets de connexion et de DNS des deux sont plus courts ; ainsi les échecs échouent rapidement.

05

Audit par événement corrélé à la session AAM

Chaque étape du flux OIDC — début du flux, succès du callback, échange de jetons (quels jetons sont revenus), résultat de la vérification de la signature de l'ID token, résultat de la récupération du JWKS — est enregistrée avec un ID de corrélation qui revient à la session AAM et au(x) backend(s) derrière elle. La question « qui s'est connecté via quel IdP et quand » se répond avec une seule requête.

06

Feuille de route — découverte automatique du fournisseur et télémétrie de rotation JWKS

La découverte automatique du fournisseur OIDC via l'endpoint .well-known/openid-configuration et l'alerte de l'opérateur lorsque les endpoints découverts ou les jeux de clés de signature changent sont sur la feuille de route. La télémétrie de rotation JWKS — métriques de changement des clés de signature, indices de jours restants avant l'expiration de la clé actuelle, runbooks de rotation automatique — est également planifiée.

Quelles équipes l'utilisent

IdP d'entreprise modernes (Entra ID, Okta, Auth0, Keycloak)

Les IdP d'entreprise existants qui authentifient déjà la main-d'œuvre via OIDC. AAM s'enfiche comme un relying party sans demander à l'équipe IdP de changer quoi que ce soit. Les nouvelles applications rejoignent la fédération non pas en ajoutant un nouveau SDK OIDC à chaque base de code, mais en ajoutant un enregistrement dans AAM.

IdP sociaux pour la main-d'œuvre (Google Workspace, GitHub)

Des outils internes qui s'authentifient contre le tenant Google Workspace de l'organisation, ou des outils pour développeurs qui utilisent GitHub comme IdP. AAM parle OIDC à Google et OAuth 2.0 à GitHub — depuis le même moteur — et mappe chacun vers le format de session canonique d'AAM.

SaaS multi-tenant avec un IdP OIDC par tenant

Des applications SaaS où chaque client apporte son propre IdP OIDC. Une seule passerelle AAM place tous les tenants en façade ; le trafic de chaque tenant est routé vers l'IdP de ce tenant. Ajouter un tenant n'est pas un déploiement ; c'est ajouter une modification de configuration au magasin d'enregistrements d'IdP.

MFA en périphérie et accès conditionnel par-dessus un IdP OIDC

Certains IdP authentifient mais n'appliquent pas la MFA step-up ou l'accès conditionnel de manière uniforme pour chaque application. AAM accepte l'authentification de l'IdP, puis fait reposer sa propre MFA, ses expressions d'accès conditionnel et son évaluation continue de la confiance par-dessus, avant d'accorder l'accès à l'application.

Questions fréquentes

Avec quels IdP AAM se fédère-t-il via OIDC et OAuth 2.0 ?
Tout IdP OIDC ou OAuth 2.0 conforme aux standards. En pratique, cela inclut Entra ID (Azure AD), Okta, Auth0, Keycloak, Google Workspace, GitHub et tout IdP personnalisé qui expose des endpoints standard. Les profils intégrés sont fournis avec des valeurs par défaut raisonnables pour les fournisseurs courants ; le chemin IdP personnalisé, où les endpoints, les scopes et les mappings sont saisis manuellement, reste disponible pour tout fournisseur conforme aux standards.
Comment AAM se défend-il contre le rejeu d'ID token, le CSRF et les attaques de mixup ?
Le nonce lie l'ID token à la requête d'autorisation qui l'a demandé — une non-concordance est un signal de rejeu dédié avec son propre événement d'audit. Le state lie le callback à la session de l'utilisateur avec un TTL de 10 minutes — le rejeu entre sessions est rejeté. PKCE (S256 par défaut) lie l'échange de code au client d'origine — un code d'autorisation intercepté ne peut pas être échangé contre des jetons par l'attaquant. Les attaques de mixup sont déjouées en liant le callback à un IdP spécifique et en vérifiant la revendication issuer en conséquence.
Que se passe-t-il lorsque l'IdP effectue une rotation de ses clés de signature ?
Le JWKS est mis en cache dans un magasin partagé avec un TTL d'une heure. À l'arrivée du callback, AAM sélectionne la clé de signature depuis le cache à partir de l'en-tête kid de l'ID token. Si le kid n'est pas dans le jeu mis en cache — ce qui arrive juste après une rotation de clés de l'IdP — AAM déclenche un rafraîchissement instantané depuis l'URI JWKS et réessaie la sélection. Une rotation de clés de routine ne produit pas d'interruption de connexion.
Quelle est la différence entre OIDC et OAuth 2.0 simple sur cette page ?
OIDC ajoute une couche d'identité par-dessus OAuth 2.0 : un ID token signé contenant des revendications d'identité est renvoyé à côté du jeton d'accès. AAM parle les deux. Pour les fournisseurs OIDC, l'ID token est vérifié contre le JWKS et fusionné avec la réponse userinfo ; les revendications signées priment. Pour les fournisseurs OAuth 2.0 simples (pas d'ID token), AAM s'appuie uniquement sur la réponse userinfo pour l'identité et applique les mêmes défenses d'audit, de state et de PKCE autour du flux.
Que devient l'identité une fois qu'AAM a consommé les jetons ?
Les revendications vérifiées de l'ID token et la réponse userinfo sont fusionnées et mappées vers les champs de session canoniques d'AAM (nom d'utilisateur, e-mail, groupes, nom d'affichage, attributs personnalisés). Le reste du moteur d'accès raisonne sur cette session — gating MFA, expressions d'accès conditionnel, évaluation continue de la confiance, injection SSO Backend vers le backend. L'application reçoit l'identité dans le format qu'elle attend via le SSO Backend ; le protocole OIDC s'arrête à la périphérie AAM.

OIDC correctement, à la périphérie

Connectons AAM à votre IdP OIDC — d'entreprise, cloud ou auto-hébergé — et faisons reposer le reste du moteur d'accès, avec MFA, accès conditionnel, confiance de l'appareil et SSO Backend, sur l'ID token vérifié.