{"id":1270,"date":"2026-10-28T23:02:20","date_gmt":"2026-10-28T22:02:20","guid":{"rendered":"https:\/\/remivernier.com\/?p=1270"},"modified":"2026-10-28T23:02:20","modified_gmt":"2026-10-28T22:02:20","slug":"oauth-openid-connect-saml-ws-federation-comparaison","status":"publish","type":"post","link":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/","title":{"rendered":"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer"},"content":{"rendered":"<p>D\u00e8s qu&rsquo;une application cesse de g\u00e9rer elle-m\u00eame les mots de passe pour d\u00e9l\u00e9guer la connexion \u00e0 un tiers de confiance, elle parle l&rsquo;un de ces quatre protocoles: OAuth 2.0, OpenID Connect, SAML 2.0 ou WS-Federation. On les confond souvent, parce qu&rsquo;ils r\u00e9solvent des variantes d&rsquo;un m\u00eame probl\u00e8me \u2014 faire confiance \u00e0 un annuaire central sans jamais voir le secret de l&rsquo;utilisateur \u2014 mais ils ne disent pas tous la m\u00eame chose, ni \u00e0 la m\u00eame \u00e9poque. Cet article les d\u00e9monte un par un, avec leurs \u00e9changes, puis les met c\u00f4te \u00e0 c\u00f4te.<\/p>\n<h2>Authentification et autorisation: ne pas confondre les deux questions<\/h2>\n<p>Tout part d&rsquo;une distinction que ces protocoles traitent diff\u00e9remment. <strong>L&rsquo;authentification<\/strong> r\u00e9pond \u00e0 \u00ab qui es-tu? \u00bb; <strong>l&rsquo;autorisation<\/strong> r\u00e9pond \u00e0 \u00ab qu&rsquo;as-tu le droit de faire? \u00bb. OAuth 2.0 ne r\u00e9pond qu&rsquo;\u00e0 la seconde: c&rsquo;est un protocole de d\u00e9l\u00e9gation d&rsquo;acc\u00e8s, pas de preuve d&rsquo;identit\u00e9. OpenID Connect ajoute la premi\u00e8re par-dessus OAuth. SAML et WS-Federation, eux, sont n\u00e9s pour faire les deux d&rsquo;un coup, au service du SSO web d&rsquo;entreprise. Garder cette grille en t\u00eate \u00e9vite l&rsquo;erreur la plus courante, qui est d&rsquo;utiliser OAuth seul pour \u00ab connecter \u00bb un utilisateur.<\/p>\n<p>Un point commun \u00e0 retenir avant d&rsquo;entrer dans le d\u00e9tail: ces quatre protocoles s&rsquo;appuient sur le navigateur et des redirections, pas sur un \u00e9change direct entre l&rsquo;application et l&rsquo;annuaire. L&rsquo;\u00e9tage en dessous \u2014 comment l&rsquo;utilisateur prouve son identit\u00e9 \u00e0 l&rsquo;annuaire, par mot de passe, par <a href=\"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/passkeys-fido2-entra-id-ceremonie-webauthn\/\">passkey<\/a> ou autre \u2014 est un autre sujet, ind\u00e9pendant du protocole de f\u00e9d\u00e9ration choisi.<\/p>\n<h2>OAuth 2.0: d\u00e9l\u00e9guer l&rsquo;acc\u00e8s<\/h2>\n<p>OAuth 2.0 (RFC 6749, 2012) r\u00e9pond \u00e0 une question pr\u00e9cise: comment une application peut-elle acc\u00e9der \u00e0 une ressource au nom de l&rsquo;utilisateur, sans conna\u00eetre son mot de passe? Il d\u00e9finit quatre r\u00f4les. Le <em>propri\u00e9taire de la ressource<\/em> est l&rsquo;utilisateur. Le <em>client<\/em> est l&rsquo;application qui veut acc\u00e9der \u00e0 quelque chose. Le <em>serveur d&rsquo;autorisation<\/em> authentifie l&rsquo;utilisateur et \u00e9met des jetons. Le <em>serveur de ressources<\/em> (l&rsquo;API) h\u00e9berge les donn\u00e9es et accepte les jetons.<\/p>\n<p>Le client re\u00e7oit un <strong>jeton d&rsquo;acc\u00e8s<\/strong>, une cha\u00eene qu&rsquo;il pr\u00e9sente \u00e0 l&rsquo;API \u00e0 chaque requ\u00eate, souvent accompagn\u00e9 d&rsquo;un <strong>jeton de rafra\u00eechissement<\/strong> pour en obtenir un nouveau sans redemander l&rsquo;utilisateur. Les <em>scopes<\/em> d\u00e9limitent ce que le jeton autorise (lire les mails, mais pas les envoyer, par exemple). Le jeton d&rsquo;acc\u00e8s est opaque pour le client: il ne cherche pas \u00e0 le lire, il le transmet.<\/p>\n<p>Le flux canonique est le <strong>code d&rsquo;autorisation avec PKCE<\/strong>. Le client pr\u00e9pare un secret \u00e9ph\u00e9m\u00e8re (<code>code_verifier<\/code>) et son empreinte (<code>code_challenge<\/code>), redirige le navigateur vers le serveur d&rsquo;autorisation, r\u00e9cup\u00e8re un code \u00e0 usage unique, puis l&rsquo;\u00e9change en direct contre les jetons en prouvant qu&rsquo;il d\u00e9tient bien le secret. PKCE lie le code \u00e0 celui qui l&rsquo;a demand\u00e9, ce qui ferme l&rsquo;interception du code.<\/p>\n<figure class=\"wp-block-image\">\n<svg viewBox=\"0 0 720 320\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" font-family=\"sans-serif\" font-size=\"11.5\">\n<text x=\"80\" y=\"16\" text-anchor=\"middle\" font-weight=\"bold\">Navigateur<\/text>\n<text x=\"275\" y=\"16\" text-anchor=\"middle\" font-weight=\"bold\">Application<\/text>\n<text x=\"480\" y=\"16\" text-anchor=\"middle\" font-weight=\"bold\">Serveur d&rsquo;autorisation<\/text>\n<text x=\"665\" y=\"16\" text-anchor=\"middle\" font-weight=\"bold\">API<\/text>\n<line x1=\"80\" y1=\"26\" x2=\"80\" y2=\"300\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<line x1=\"275\" y1=\"26\" x2=\"275\" y2=\"300\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<line x1=\"480\" y1=\"26\" x2=\"480\" y2=\"300\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<line x1=\"665\" y1=\"26\" x2=\"665\" y2=\"300\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<text x=\"275\" y=\"42\" text-anchor=\"middle\" font-size=\"10.5\" fill=\"#5b6170\">g\u00e9n\u00e8re code_verifier + code_challenge<\/text>\n<text x=\"280\" y=\"66\" text-anchor=\"middle\">1. redirection vers \/authorize (code_challenge)<\/text>\n<line x1=\"82\" y1=\"74\" x2=\"478\" y2=\"74\" stroke=\"#333\" marker-end=\"url(#o)\"\/>\n<rect x=\"150\" y=\"90\" width=\"330\" height=\"26\" fill=\"#f0f1f4\" stroke=\"#999\"\/>\n<text x=\"315\" y=\"107\" text-anchor=\"middle\">2. l&rsquo;utilisateur s&rsquo;authentifie et consent<\/text>\n<text x=\"378\" y=\"140\" text-anchor=\"middle\">3. code d&rsquo;autorisation (via le navigateur)<\/text>\n<line x1=\"478\" y1=\"148\" x2=\"277\" y2=\"148\" stroke=\"#333\" marker-end=\"url(#o)\"\/>\n<text x=\"378\" y=\"176\" text-anchor=\"middle\">4. code + code_verifier &#8594; \/token<\/text>\n<line x1=\"277\" y1=\"184\" x2=\"478\" y2=\"184\" stroke=\"#333\" marker-end=\"url(#o)\"\/>\n<text x=\"378\" y=\"212\" text-anchor=\"middle\">5. access token (+ refresh token)<\/text>\n<line x1=\"478\" y1=\"220\" x2=\"277\" y2=\"220\" stroke=\"#333\" marker-end=\"url(#o)\"\/>\n<text x=\"470\" y=\"256\" text-anchor=\"middle\">6. appel avec l&rsquo;access token<\/text>\n<line x1=\"277\" y1=\"264\" x2=\"663\" y2=\"264\" stroke=\"#333\" marker-end=\"url(#o)\"\/>\n<defs><marker id=\"o\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"4\" orient=\"auto\"><path d=\"M0,0 L8,4 L0,8 z\" fill=\"#333\"\/><\/marker><\/defs>\n<\/svg><br \/>\n<\/figure>\n<p style=\"text-align:center\"><em>Flux \u00ab code d&rsquo;autorisation + PKCE \u00bb: le code passe par le navigateur, l&rsquo;\u00e9change contre les jetons se fait en direct.<\/em><\/p>\n<p>D&rsquo;autres flux existent pour d&rsquo;autres besoins: <em>client credentials<\/em> pour une application qui agit en son nom propre, de machine \u00e0 machine; <em>device code<\/em> pour un appareil sans clavier ni navigateur. En revanche deux anciens flux sont d\u00e9sormais \u00e9cart\u00e9s: le flux <em>implicit<\/em> (qui renvoyait le jeton directement dans l&rsquo;URL) et le flux <em>mot de passe<\/em> (o\u00f9 le client voyait le mot de passe). La bonne pratique de s\u00e9curit\u00e9 OAuth, publi\u00e9e en RFC 9700, les d\u00e9conseille, et le brouillon OAuth 2.1 les retire en faisant de PKCE la r\u00e8gle pour tous.<\/p>\n<h2>OpenID Connect: l&rsquo;identit\u00e9 par-dessus OAuth<\/h2>\n<p>OAuth a un angle mort: \u00e0 la fin du flux, le client d\u00e9tient un jeton d&rsquo;acc\u00e8s, mais il ne sait pas <em>qui<\/em> est l&rsquo;utilisateur. Rien dans OAuth ne le lui dit de fa\u00e7on fiable. OpenID Connect (OIDC, 2014) comble ce vide en ajoutant une couche d&rsquo;identit\u00e9 au-dessus d&rsquo;OAuth 2.0, sans en changer les \u00e9changes.<\/p>\n<p>Concr\u00e8tement, le client ajoute le scope <code>openid<\/code> \u00e0 sa demande. En plus du jeton d&rsquo;acc\u00e8s, le serveur renvoie alors un <strong>jeton d&rsquo;identit\u00e9<\/strong> (<em>ID token<\/em>): un JWT sign\u00e9, que le client est cette fois cens\u00e9 lire et valider. Il contient des revendications normalis\u00e9es \u2014 l&rsquo;\u00e9metteur (<code>iss<\/code>), le sujet (<code>sub<\/code>, l&rsquo;identifiant stable de l&rsquo;utilisateur), le destinataire (<code>aud<\/code>), l&rsquo;expiration (<code>exp<\/code>), et le <code>nonce<\/code> qui lie le jeton \u00e0 la demande. Un <em>endpoint<\/em> UserInfo fournit au besoin les attributs de profil, et un document de d\u00e9couverte publi\u00e9 sur <code>\/.well-known\/openid-configuration<\/code> d\u00e9crit tous les endpoints et les options du fournisseur, ce qui \u00e9vite de les configurer \u00e0 la main.<\/p>\n<figure class=\"wp-block-image\">\n<svg viewBox=\"0 0 720 300\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" font-family=\"sans-serif\" font-size=\"12\">\n<rect x=\"15\" y=\"14\" width=\"690\" height=\"30\" rx=\"5\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"360\" y=\"34\" text-anchor=\"middle\" font-weight=\"bold\">R\u00e9ponse de \/token quand scope = openid<\/text>\n<rect x=\"15\" y=\"60\" width=\"218\" height=\"140\" rx=\"5\" fill=\"#eef1f6\" stroke=\"#333\"\/>\n<text x=\"124\" y=\"82\" text-anchor=\"middle\" font-weight=\"bold\">access token<\/text>\n<text x=\"124\" y=\"104\" text-anchor=\"middle\" font-size=\"11\">opaque<\/text>\n<text x=\"124\" y=\"150\" text-anchor=\"middle\" font-size=\"11\" fill=\"#5b6170\">pr\u00e9sent\u00e9 \u00e0 l&rsquo;API<\/text>\n<text x=\"124\" y=\"168\" text-anchor=\"middle\" font-size=\"11\" fill=\"#5b6170\">(c\u00f4t\u00e9 OAuth)<\/text>\n<rect x=\"251\" y=\"60\" width=\"218\" height=\"140\" rx=\"5\" fill=\"#e6f4ea\" stroke=\"#333\"\/>\n<text x=\"360\" y=\"82\" text-anchor=\"middle\" font-weight=\"bold\">id token (JWT)<\/text>\n<text x=\"267\" y=\"106\" font-size=\"11\">iss &#8226; sub &#8226; aud<\/text>\n<text x=\"267\" y=\"126\" font-size=\"11\">exp &#8226; iat &#8226; nonce<\/text>\n<text x=\"360\" y=\"168\" text-anchor=\"middle\" font-size=\"11\" fill=\"#5b6170\">lu par le client:<\/text>\n<text x=\"360\" y=\"184\" text-anchor=\"middle\" font-size=\"11\" fill=\"#5b6170\">prouve l&rsquo;identit\u00e9 (OIDC)<\/text>\n<rect x=\"487\" y=\"60\" width=\"218\" height=\"140\" rx=\"5\" fill=\"#eef1f6\" stroke=\"#333\"\/>\n<text x=\"596\" y=\"82\" text-anchor=\"middle\" font-weight=\"bold\">refresh token<\/text>\n<text x=\"596\" y=\"150\" text-anchor=\"middle\" font-size=\"11\" fill=\"#5b6170\">renouvelle les jetons<\/text>\n<text x=\"596\" y=\"168\" text-anchor=\"middle\" font-size=\"11\" fill=\"#5b6170\">sans l&rsquo;utilisateur<\/text>\n<rect x=\"15\" y=\"220\" width=\"340\" height=\"62\" rx=\"5\" fill=\"#fef7e0\" stroke=\"#333\"\/>\n<text x=\"185\" y=\"244\" text-anchor=\"middle\" font-weight=\"bold\">\/userinfo<\/text>\n<text x=\"185\" y=\"266\" text-anchor=\"middle\" font-size=\"11\">attributs de profil pour un access token<\/text>\n<rect x=\"365\" y=\"220\" width=\"340\" height=\"62\" rx=\"5\" fill=\"#fef7e0\" stroke=\"#333\"\/>\n<text x=\"535\" y=\"244\" text-anchor=\"middle\" font-weight=\"bold\">\/.well-known\/openid-configuration<\/text>\n<text x=\"535\" y=\"266\" text-anchor=\"middle\" font-size=\"11\">d\u00e9couverte des endpoints et options<\/text>\n<\/svg><br \/>\n<\/figure>\n<p style=\"text-align:center\"><em>Ce qu&rsquo;OpenID Connect ajoute \u00e0 OAuth: un jeton d&rsquo;identit\u00e9 lisible, un endpoint de profil et la d\u00e9couverte.<\/em><\/p>\n<p>La nuance est fondamentale: le jeton d&rsquo;acc\u00e8s est fait pour l&rsquo;API et reste opaque au client; le jeton d&rsquo;identit\u00e9 est fait pour le client et lui dit qui vient de se connecter. C&rsquo;est cette combinaison \u2014 OAuth pour l&rsquo;acc\u00e8s, OIDC pour l&rsquo;identit\u00e9 \u2014 qui \u00e9quipe aujourd&rsquo;hui la grande majorit\u00e9 des applications web, mobiles et monopages.<\/p>\n<h2>SAML 2.0: le v\u00e9t\u00e9ran du SSO web d&rsquo;entreprise<\/h2>\n<p>SAML 2.0 (2005) est ant\u00e9rieur de sept ans \u00e0 OAuth, et il vient d&rsquo;un autre monde, celui du XML. Il d\u00e9finit deux r\u00f4les: le <em>fournisseur d&rsquo;identit\u00e9<\/em> (IdP), qui authentifie, et le <em>fournisseur de service<\/em> (SP), l&rsquo;application. Entre les deux circulent des <strong>assertions<\/strong>, des documents XML sign\u00e9s qui affirment l&rsquo;identit\u00e9 de l&rsquo;utilisateur et portent ses attributs.<\/p>\n<p>Le sc\u00e9nario habituel est initi\u00e9 par le SP. L&rsquo;utilisateur arrive sur l&rsquo;application, qui fabrique une <code>AuthnRequest<\/code> et renvoie le navigateur vers l&rsquo;IdP (liaison <em>HTTP-Redirect<\/em>). L&rsquo;IdP authentifie l&rsquo;utilisateur, puis renvoie une <code>Response<\/code> contenant l&rsquo;assertion sign\u00e9e, le plus souvent par un formulaire auto-soumis (liaison <em>HTTP-POST<\/em>). Le SP v\u00e9rifie la signature XML, et ouvre la session. Un document de m\u00e9tadonn\u00e9es XML, \u00e9chang\u00e9 \u00e0 la configuration, fixe les URL, les certificats et les formats de part et d&rsquo;autre.<\/p>\n<figure class=\"wp-block-image\">\n<svg viewBox=\"0 0 720 310\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" font-family=\"sans-serif\" font-size=\"11.5\">\n<text x=\"120\" y=\"16\" text-anchor=\"middle\" font-weight=\"bold\">Navigateur<\/text>\n<text x=\"380\" y=\"16\" text-anchor=\"middle\" font-weight=\"bold\">Application (SP)<\/text>\n<text x=\"630\" y=\"16\" text-anchor=\"middle\" font-weight=\"bold\">IdP<\/text>\n<line x1=\"120\" y1=\"26\" x2=\"120\" y2=\"292\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<line x1=\"380\" y1=\"26\" x2=\"380\" y2=\"292\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<line x1=\"630\" y1=\"26\" x2=\"630\" y2=\"292\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<text x=\"250\" y=\"58\" text-anchor=\"middle\">1. acc\u00e8s \u00e0 la ressource<\/text>\n<line x1=\"122\" y1=\"66\" x2=\"378\" y2=\"66\" stroke=\"#333\" marker-end=\"url(#s)\"\/>\n<text x=\"250\" y=\"96\" text-anchor=\"middle\">2. AuthnRequest, redirection (HTTP-Redirect)<\/text>\n<line x1=\"378\" y1=\"104\" x2=\"122\" y2=\"104\" stroke=\"#333\" marker-end=\"url(#s)\"\/>\n<text x=\"375\" y=\"138\" text-anchor=\"middle\">3. authentification de l&rsquo;utilisateur<\/text>\n<line x1=\"122\" y1=\"146\" x2=\"628\" y2=\"146\" stroke=\"#333\" marker-end=\"url(#s)\"\/>\n<text x=\"375\" y=\"184\" text-anchor=\"middle\">4. Response + Assertion sign\u00e9e (HTTP-POST)<\/text>\n<line x1=\"628\" y1=\"192\" x2=\"122\" y2=\"192\" stroke=\"#333\" marker-end=\"url(#s)\"\/>\n<text x=\"250\" y=\"224\" text-anchor=\"middle\">5. POST de l&rsquo;assertion<\/text>\n<line x1=\"122\" y1=\"232\" x2=\"378\" y2=\"232\" stroke=\"#333\" marker-end=\"url(#s)\"\/>\n<rect x=\"250\" y=\"250\" width=\"320\" height=\"30\" fill=\"#f0f1f4\" stroke=\"#999\"\/>\n<text x=\"410\" y=\"269\" text-anchor=\"middle\">6. le SP valide la signature XML et ouvre la session<\/text>\n<defs><marker id=\"s\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"4\" orient=\"auto\"><path d=\"M0,0 L8,4 L0,8 z\" fill=\"#333\"\/><\/marker><\/defs>\n<\/svg><br \/>\n<\/figure>\n<p style=\"text-align:center\"><em>SSO SAML initi\u00e9 par le SP: l&rsquo;assertion sign\u00e9e transite par le navigateur en HTTP-POST.<\/em><\/p>\n<p>SAML reste tr\u00e8s pr\u00e9sent dans le SaaS d&rsquo;entreprise, o\u00f9 il est souvent la case \u00e0 cocher attendue par les acheteurs. Sa d\u00e9connexion centralis\u00e9e (<em>Single Logout<\/em>, SLO) et ses d\u00e9clarations d&rsquo;attributs d\u00e9taill\u00e9es r\u00e9pondent \u00e0 des besoins r\u00e9els, au prix d&rsquo;une mise en \u0153uvre plus lourde: tout est XML, signatures comprises.<\/p>\n<h2>WS-Federation: le monde Microsoft historique<\/h2>\n<p>WS-Federation (d\u00e9but des ann\u00e9es 2000) vient de la famille WS-*, port\u00e9e \u00e0 l&rsquo;\u00e9poque par Microsoft et IBM. Fonctionnellement, il ressemble \u00e0 SAML \u2014 un IdP, une application, un jeton sign\u00e9 transport\u00e9 par le navigateur \u2014 mais avec sa propre grammaire. La demande se fait par une URL <code>wsignin1.0<\/code> portant des param\u00e8tres comme <code>wtrealm<\/code> (l&rsquo;identifiant de l&rsquo;application), <code>wreply<\/code> (o\u00f9 revenir) et <code>wctx<\/code> (le contexte \u00e0 reporter). Le jeton renvoy\u00e9 est g\u00e9n\u00e9ralement une assertion SAML, souvent au format 1.1, envelopp\u00e9e dans les structures WS-*. La d\u00e9connexion passe par <code>wsignout1.0<\/code>.<\/p>\n<p>C&rsquo;est le protocole d&rsquo;ADFS, de SharePoint et de nombreuses applications .NET d&rsquo;entreprise. On le croise encore dans ces environnements, mais on ne d\u00e9marre plus de projet dessus: pour une int\u00e9gration neuve, le choix se fait aujourd&rsquo;hui entre SAML et OIDC. Il garde un int\u00e9r\u00eat pour relier une application h\u00e9rit\u00e9e \u00e0 un annuaire moderne, qui sait encore le parler.<\/p>\n<h2>La comparaison<\/h2>\n<p>Deux familles se d\u00e9gagent. D&rsquo;un c\u00f4t\u00e9 le monde XML et WS-* (SAML, WS-Federation), con\u00e7u pour le SSO web d&rsquo;entreprise de la d\u00e9cennie 2000. De l&rsquo;autre le monde JSON et REST (OAuth, OIDC), con\u00e7u pour les API, le mobile et les applications monopages. Tous passent par le navigateur et des redirections; la vraie ligne de partage est l&rsquo;\u00e2ge, l&rsquo;\u00e9cosyst\u00e8me et le format des messages.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Aspect<\/th>\n<th>OAuth 2.0<\/th>\n<th>OpenID Connect<\/th>\n<th>SAML 2.0<\/th>\n<th>WS-Federation<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>R\u00f4le<\/td>\n<td>Autorisation (acc\u00e8s)<\/td>\n<td>Authentification (identit\u00e9)<\/td>\n<td>Authentification + SSO<\/td>\n<td>Authentification + SSO<\/td>\n<\/tr>\n<tr>\n<td>Format<\/td>\n<td>JSON<\/td>\n<td>JSON \/ JWT<\/td>\n<td>XML<\/td>\n<td>XML (WS-*)<\/td>\n<\/tr>\n<tr>\n<td>Jeton<\/td>\n<td>access + refresh (opaques)<\/td>\n<td>id token (JWT sign\u00e9)<\/td>\n<td>assertion SAML (XML-DSig)<\/td>\n<td>assertion SAML via WS-*<\/td>\n<\/tr>\n<tr>\n<td>D\u00e9couverte<\/td>\n<td>metadata (RFC 8414)<\/td>\n<td>\/.well-known\/openid-configuration<\/td>\n<td>m\u00e9tadonn\u00e9es XML<\/td>\n<td>m\u00e9tadonn\u00e9es XML<\/td>\n<\/tr>\n<tr>\n<td>Apparu<\/td>\n<td>2012<\/td>\n<td>2014<\/td>\n<td>2005<\/td>\n<td>~2003<\/td>\n<\/tr>\n<tr>\n<td>Terrain<\/td>\n<td>API, d\u00e9l\u00e9gation d&rsquo;acc\u00e8s<\/td>\n<td>web, mobile, SPA<\/td>\n<td>SSO d&rsquo;entreprise, SaaS<\/td>\n<td>apps Microsoft h\u00e9rit\u00e9es<\/td>\n<\/tr>\n<tr>\n<td>D\u00e9connexion<\/td>\n<td>r\u00e9vocation de jeton<\/td>\n<td>logout RP-initiated, front\/back-channel<\/td>\n<td>Single Logout (SLO)<\/td>\n<td>wsignout1.0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2>O\u00f9 on les croise, et lequel choisir<\/h2>\n<p>Un annuaire moderne comme Microsoft Entra ID parle les quatre. Une application enregistr\u00e9e via les <em>App registrations<\/em> est en OIDC\/OAuth par d\u00e9faut; le SSO SAML et WS-Federation reste propos\u00e9 pour les applications qui l&rsquo;exigent. Le <a href=\"https:\/\/learn.microsoft.com\/en-us\/entra\/identity\/enterprise-apps\/saml-vs-oidc-decision-guide\">guide de d\u00e9cision de Microsoft<\/a> est direct sur le choix: SAML est \u00ab un protocole de f\u00e9d\u00e9ration mature bas\u00e9 sur XML \u00bb, OIDC \u00ab un protocole de connexion moderne b\u00e2ti sur OAuth 2.0 \u00bb, et sa recommandation tient en une phrase \u2014 en cas de doute, OIDC par d\u00e9faut pour tout nouveau d\u00e9veloppement.<\/p>\n<p>En pratique: OIDC (avec OAuth pour l&rsquo;acc\u00e8s aux API) pour toute application neuve, web, mobile ou monopage; SAML quand un client d&rsquo;entreprise ou une contrainte de conformit\u00e9 l&rsquo;impose; WS-Federation seulement pour maintenir l&rsquo;existant c\u00f4t\u00e9 ADFS ou SharePoint. Et quand la client\u00e8le est mixte, les fournisseurs SaaS supportent souvent SAML et OIDC en parall\u00e8le.<\/p>\n<p>Ces protocoles ne font qu&rsquo;\u00e9tablir la confiance et transporter le verdict. Ce qu&rsquo;ils transportent ensuite \u2014 le jeton de session, son cycle de vie, sa protection contre le vol \u2014 est une autre histoire, celle que nous avons suivie c\u00f4t\u00e9 Entra avec le <a href=\"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/\">Primary Refresh Token<\/a>. Choisir le bon dialecte de f\u00e9d\u00e9ration, c&rsquo;est la premi\u00e8re brique; prot\u00e9ger les jetons qui en d\u00e9coulent, c&rsquo;est la suivante.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OAuth 2.0 d\u00e9l\u00e8gue l&rsquo;acc\u00e8s, OpenID Connect prouve l&rsquo;identit\u00e9, SAML et WS-Federation assurent le SSO web d&rsquo;entreprise : fonctionnement, sch\u00e9mas et comparaison des quatre protocoles de f\u00e9d\u00e9ration.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,3,36,37],"tags":[89,86,87,29,9,88],"class_list":["post-1270","post","type-post","status-publish","format-standard","hentry","category-federation-services","category-protocoles","category-saml","category-securite","tag-jwt","tag-oauth","tag-openid-connect","tag-saml","tag-sso","tag-ws-federation"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer - R\u00e9mi VERNIER<\/title>\n<meta name=\"description\" content=\"OAuth 2.0 d\u00e9l\u00e8gue l&#039;acc\u00e8s, OpenID Connect prouve l&#039;identit\u00e9, SAML et WS-Federation assurent le SSO web d&#039;entreprise : fonctionnement, sch\u00e9mas et comparaison des quatre protocoles de f\u00e9d\u00e9ration.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer - R\u00e9mi VERNIER\" \/>\n<meta property=\"og:description\" content=\"OAuth 2.0 d\u00e9l\u00e8gue l&#039;acc\u00e8s, OpenID Connect prouve l&#039;identit\u00e9, SAML et WS-Federation assurent le SSO web d&#039;entreprise : fonctionnement, sch\u00e9mas et comparaison des quatre protocoles de f\u00e9d\u00e9ration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/\" \/>\n<meta property=\"og:site_name\" content=\"R\u00e9mi VERNIER\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-28T22:02:20+00:00\" \/>\n<meta name=\"author\" content=\"R\u00e9mi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"R\u00e9mi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/\"},\"author\":{\"name\":\"R\u00e9mi\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/#\\\/schema\\\/person\\\/a4c76c63a5a3d94454484845e42fc906\"},\"headline\":\"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer\",\"datePublished\":\"2026-10-28T22:02:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/\"},\"wordCount\":1800,\"commentCount\":0,\"keywords\":[\"JWT\",\"OAuth\",\"OpenID Connect\",\"saml\",\"SSO\",\"WS-Federation\"],\"articleSection\":[\"Federation Services\",\"Protocoles\",\"SAML\",\"S\u00e9curit\u00e9\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/\",\"url\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/\",\"name\":\"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer - R\u00e9mi VERNIER\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/#website\"},\"datePublished\":\"2026-10-28T22:02:20+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/#\\\/schema\\\/person\\\/a4c76c63a5a3d94454484845e42fc906\"},\"description\":\"OAuth 2.0 d\u00e9l\u00e8gue l'acc\u00e8s, OpenID Connect prouve l'identit\u00e9, SAML et WS-Federation assurent le SSO web d'entreprise : fonctionnement, sch\u00e9mas et comparaison des quatre protocoles de f\u00e9d\u00e9ration.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/oauth-openid-connect-saml-ws-federation-comparaison\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/remivernier.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/#website\",\"url\":\"https:\\\/\\\/remivernier.com\\\/\",\"name\":\"R\u00e9mi VERNIER\",\"description\":\"Identit\u00e9, s\u00e9curit\u00e9, SAP et IA : Active Directory, Azure &amp; co...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/remivernier.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/#\\\/schema\\\/person\\\/a4c76c63a5a3d94454484845e42fc906\",\"name\":\"R\u00e9mi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"caption\":\"R\u00e9mi\"},\"sameAs\":[\"http:\\\/\\\/www.linkedin.com\\\/in\\\/remi-vernier\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer - R\u00e9mi VERNIER","description":"OAuth 2.0 d\u00e9l\u00e8gue l'acc\u00e8s, OpenID Connect prouve l'identit\u00e9, SAML et WS-Federation assurent le SSO web d'entreprise : fonctionnement, sch\u00e9mas et comparaison des quatre protocoles de f\u00e9d\u00e9ration.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/","og_locale":"fr_FR","og_type":"article","og_title":"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer - R\u00e9mi VERNIER","og_description":"OAuth 2.0 d\u00e9l\u00e8gue l'acc\u00e8s, OpenID Connect prouve l'identit\u00e9, SAML et WS-Federation assurent le SSO web d'entreprise : fonctionnement, sch\u00e9mas et comparaison des quatre protocoles de f\u00e9d\u00e9ration.","og_url":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/","og_site_name":"R\u00e9mi VERNIER","article_published_time":"2026-10-28T22:02:20+00:00","author":"R\u00e9mi","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"R\u00e9mi","Dur\u00e9e de lecture estim\u00e9e":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/#article","isPartOf":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/"},"author":{"name":"R\u00e9mi","@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906"},"headline":"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer","datePublished":"2026-10-28T22:02:20+00:00","mainEntityOfPage":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/"},"wordCount":1800,"commentCount":0,"keywords":["JWT","OAuth","OpenID Connect","saml","SSO","WS-Federation"],"articleSection":["Federation Services","Protocoles","SAML","S\u00e9curit\u00e9"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/","url":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/","name":"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer - R\u00e9mi VERNIER","isPartOf":{"@id":"https:\/\/remivernier.com\/#website"},"datePublished":"2026-10-28T22:02:20+00:00","author":{"@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906"},"description":"OAuth 2.0 d\u00e9l\u00e8gue l'acc\u00e8s, OpenID Connect prouve l'identit\u00e9, SAML et WS-Federation assurent le SSO web d'entreprise : fonctionnement, sch\u00e9mas et comparaison des quatre protocoles de f\u00e9d\u00e9ration.","breadcrumb":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/oauth-openid-connect-saml-ws-federation-comparaison\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/remivernier.com\/"},{"@type":"ListItem","position":2,"name":"OAuth 2.0, OpenID Connect, SAML et WS-Federation : comprendre et comparer"}]},{"@type":"WebSite","@id":"https:\/\/remivernier.com\/#website","url":"https:\/\/remivernier.com\/","name":"R\u00e9mi VERNIER","description":"Identit\u00e9, s\u00e9curit\u00e9, SAP et IA : Active Directory, Azure &amp; co...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/remivernier.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906","name":"R\u00e9mi","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","caption":"R\u00e9mi"},"sameAs":["http:\/\/www.linkedin.com\/in\/remi-vernier"]}]}},"_links":{"self":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/1270","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/comments?post=1270"}],"version-history":[{"count":1,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/1270\/revisions"}],"predecessor-version":[{"id":1271,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/1270\/revisions\/1271"}],"wp:attachment":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/media?parent=1270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/categories?post=1270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/tags?post=1270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}