SAML vs connexion fédérée avec OAuth

100

Quelle est la différence entre SAML et la connexion fédérée avec OAuth? Quelle solution a le plus de sens, si une entreprise souhaite utiliser une application Web tierce, mais souhaite également une connexion unique et être l'autorité d'authentification?

Chung Wu
la source

Réponses:

128

Ils résolvent différents problèmes.

SAML est un ensemble de normes qui ont été définies pour partager des informations sur qui est un utilisateur, quel est son ensemble d'attributs, et vous donner un moyen d'accorder / refuser l'accès à quelque chose ou même de demander une authentification.

OAuth consiste davantage à déléguer l'accès à quelque chose. Vous autorisez essentiellement quelqu'un à «agir» comme vous. Il est le plus souvent utilisé pour accorder des API d'accès qui peuvent faire quelque chose en votre nom.

Ce sont deux choses complètement différentes.


Quelques exemples qui pourraient aider.

OAuth pense à un twitter. Disons que vous utilisez Google Buzz et Twitter et que vous souhaitez écrire une application pour pouvoir garder les deux synchronisés. Vous pouvez essentiellement établir la confiance entre votre application et Twitter. La première fois que vous liez l'application à Twitter, vous exécutez l'invite classique pour vous connecter à Twitter, puis cette boîte de confirmation apparaît et vous demande "Voulez-vous accorder l'accès à« votre nom d'application »?" une fois que vous avez cliqué sur «oui», la confiance a été établie et votre application peut maintenant agir comme vous sur Twitter. Il peut lire vos messages et en créer de nouveaux.

SAML - Pour SAML, pensez à un certain type d '"accord" entre deux systèmes d'adhésion non liés. Dans notre cas, nous pouvons utiliser US Airways et Hertz. Il n'y a pas d'ensemble partagé d'informations d'identification qui peuvent vous emmener d'un site à un autre, mais disons que Hertz souhaite proposer un «accord» à US Airways. (Certes, je sais que c'est un exemple extrême, mais soyez indulgents avec moi). Après avoir acheté un vol, ils offriront une voiture de location gratuite à ses membres présidents. US Airways et Hertz établiraient une forme de confiance et un moyen d'identifier l'utilisateur. Dans notre cas, notre «identifiant fédéré» serait l'adresse e-mail, et ce serait un ensemble de confiance à sens unique. Hertz a confiance que le fournisseur d'identité d'US Airways fournira un jeton précis et sécurisé. Après la réservation du vol, le fournisseur d'identité US Airways générerait un jeton et indiquerait comment il a authentifié l'utilisateur, ainsi que des "attributs" concernant la personne dans notre cas, l'attribut le plus important serait son niveau de statut dans US Airways. Une fois que le jeton a été rempli, il le transmet via un type de référence, ou encodé dans une URL et une fois que nous sommes arrivés à Hertz, il regarde le jeton, le valide et peut maintenant autoriser la location de voiture gratuite.

Le problème avec cet exemple SAML est qu'il ne s'agit que d'un cas d'utilisation spécialisé sur plusieurs. SAML est une norme et il existe presque trop de façons de l'implémenter.


Sinon, si vous ne vous souciez pas de l'autorisation, vous pourriez presque affirmer que l'authentification via SAML et OpenID .

Rien
la source
4
Je ne comprends toujours pas la différence. «Accorder / refuser l'accès» et «Accorder l'accès à l'API» sonnent comme la même chose pour moi. Pouvez-vous donner 2 exemples plus similaires, afin que je puisse voir les différences? Par exemple, pourquoi ne pouvons-nous pas utiliser SAML pour établir la confiance entre votre application et Twitter? Ou pourquoi ne pourriez-vous pas utiliser OAuth pour Hertz pour informer USAirways de l'offre spéciale?
Tim Cooper
3
Je comprends en quelque sorte, mais je peux toujours faire du SSO avec OAuth (en demandant l'accès à une API qui fournit une identité). Cela signifie-t-il qu'OAuth peut faire tout ce que SAML peut et plus?
Dirk
@Dirk vous avez presque raison, c'est-à-dire que nous pouvons obtenir l'identité de l'utilisateur en utilisant OAuth ainsi que de nombreuses applications demandent une connexion via Google, Facebook, GitHub pour obtenir l'identité de l'utilisateur et d'autres attributs pour les laisser entrer dans leurs applications. Mais il est vrai que nous pouvons accomplir plus que d'obtenir une identité en utilisant OAuth.
chirag soni le
39

Jetez un œil à cette explication simple résumée ici:

Beaucoup de gens sont confus sur les différences entre SAML, OpenID et OAuth, mais c'est en fait très simple. Bien qu'il y ait un certain chevauchement, voici une façon très simple de distinguer les trois.

OpenID - authentification unique pour les consommateurs

SAML - authentification unique pour les utilisateurs d'entreprise

OAuth - Autorisation d'API entre applications

Pour les personnes à l'aise avec les modèles de conception OO, je pense qu'il y a un joli corollaire aux modèles d'emballage . Pensez aux modèles de façade , de décorateur et de proxy . Fondamentalement, ce sont tous les mêmes, ce ne sont que des wrappers ... La différence est l' intention de chaque motif .

De même, SAML, OAuth et OpenID facilitent tous des intentions différentes via un mécanisme sous-jacent commun , qui est la redirection vers un fournisseur de services / une autorité d'identité pour une interaction privée, suivie d'une redirection vers l'application tierce d'origine.

En regardant autour de vous sur le net, vous constaterez un chevauchement entre les capacités des protocoles. L'authentification via OAuth est parfaitement raisonnable. Cependant, l'authentification unique sur OAuth n'a pas beaucoup de sens, car SAML et OpenID sont spécifiquement axés sur l'identité fédérée.

À la question elle-même, dans un contexte d'entreprise, SAML semble plus approprié que OAuth pour SSO . Je parie que si vous regardez les applications tierces que vous souhaitez intégrer à votre identité d'entreprise, vous constaterez qu'elles sont déjà conçues pour s'intégrer à SAML / LDAP / Radius, etc. OAuth OAuth est plus approprié pour l'interaction Internet entre des applications ou peut-être des applications comprenant une architecture orientée services dans un grand environnement d'entreprise.

Les règles d'autorisation peuvent également être spécifiées dans un environnement d'entreprise. LDAP est un outil courant pour cela. L'organisation des utilisateurs en groupes et l'association des privilèges d'application à l'appartenance à un groupe est une approche répandue. C'est ainsi que LDAP peut également être utilisé pour l'authentification. Active Directory est un excellent exemple, même si je préfère OpenLDAP.

quickshiftin
la source
1
Merci d'avoir mis à jour le lien @Sundeep
quickshift du
Lien mis à jour, cependant le résumé qui était déjà dans la réponse est le même.
quickshift du
OpenID est construit sur oAuth uniquement. oAuth ne prend pas en charge l'interface utilisateur par elle-même. OpenId fait cela pour nous. Il n'y a pas d'autre différence entre oAuth et OpenID
C'est un piège
@ Ce n'est pas vrai; OpenID sur l'authentification, OAuth concerne l'autorisation, mais ils partagent un mécanisme similaire (redirection du navigateur). Ni l'un ni l'autre n'ont grand chose à voir avec une interface utilisateur ... Voir également cette réponse . Vous pouvez également regarder ici . Vous pouvez également relire ma réponse pour plus de clarification haha.
quickshift du
1
@ It'satrap Vous voudrez peut-être regarder l' authentification OpenId Spec " basée sur OAuth 2.0"; et aussi la spécification OAuth 2.0 "Le cadre d' autorisation OAuth 2.0 " ... Encore une fois, l'un est conçu pour l' authentification , l'autre pour l' autorisation . Tirer parti du plus tard pour le premier est OK car ils partagent un paradigme sous-jacent commun (pour la 3ème ou 4ème fois, je l'ai dit lol). Le tout résumé dans ma réponse inchangée. Vous devriez apprendre à lire bro.
quickshift du
3

Trouvé un bon article ici

entrez la description de l'image ici

SAML (Security Assertion Markup Language) est un ensemble de normes permettant de réaliser l'authentification unique (SSO), la fédération et la gestion des identités.

Exemple : Un utilisateur (principal) s'authentifie auprès d'un site Web de réservation de vol, AirFlyer (fournisseur d'identité) qui a configuré SSO via SAML avec un site Web de réservation de navette, Shuttler (fournisseur de services). Une fois authentifié sur Flyer, l'utilisateur peut réserver des navettes sur Shuttler sans nécessiter d'authentification

OAuth (Open Authorization) est une norme pour l'autorisation des ressources. Il ne traite pas de l'authentification.

Exemple : une application mobile de partage de photos (consommateur OAuth) qui permet aux utilisateurs d'importer des photos depuis leur compte Instagram (fournisseur OAuth) qui envoie un jeton d'accès temporaire ou une clé à l'application de partage de photos qui expire après quelques heures.

pk_code
la source
2

SAML propose une variété de «profils» permettant à d'autres utilisateurs de «se connecter» à votre site. SAML-P ou SAML Passive est très courant et assez simple à mettre en place. WS-Trust est similaire et permet également la fédération entre les sites Web.

OAuth est conçu pour l'autorisation. Vous pouvez lire plus ici:

Quelle est la différence entre OpenID et OAuth?

goodguys_activate
la source
J'ai du mal à comprendre la différence entre «connexion» et «autorisation». Pouvez-vous donner un exemple illustrant la différence?
Tim Cooper
@TimCooper "login" est une terminologie vague pour l' authentification alors que "authorize" est bien une autorisation ... Un exemple par votre demande
quickshiftin
1
@quickshiftin D'accord, je comprends cette distinction. Votre réponse semble impliquer que SAML effectue l'authentification alors qu'OAuth fait l'autorisation. Est-ce exact? Ou est-ce qu'ils font tous les deux - (auquel cas je ne sais toujours pas quelle est la différence).
Tim Cooper
1
@TimCooper Les protocoles ont des capacités qui se chevauchent. OAuth est ciblé sur l'autorisation, mais il prend également en charge l'authentification . Le SSO dans un contexte d'entreprise est quelque chose pour lequel SAML est spécialement conçu. D'un autre côté, SAML prend également en charge l'autorisation. Le contexte est le facteur le plus important pour décider de la technologie à utiliser. L'année dernière, j'ai écrit une extension pour Expression Engine qui utilisait SimpleSAMLPhp pour authentifier les utilisateurs par rapport à un backend Kerberos, puis rechercher des règles d'autorisation à partir d'un système LDAP. C'est un monde fou là-bas!
quickshift du
2

Ils gèrent un cas d'utilisation subtil

  • SAML - Partage des informations d'identification (par exemple, SSO) d'un utilisateur à divers fournisseurs de services (par exemple, Web ou service Web)
  • OAuth - Un utilisateur déléguant une application pour accéder à une ressource au nom de son / elle
yudis
la source