SAML vs Verbund Login mit OAuth


100

Was ist der Unterschied zwischen SAML und Verbundanmeldung mit OAuth? Welche Lösung ist sinnvoller, wenn ein Unternehmen eine Webanwendung eines Drittanbieters verwenden möchte, aber auch Single Sign-On möchte und die Authentifizierungsstelle sein möchte?

Antworten:


128

Sie lösen verschiedene Probleme.

SAML ist eine Reihe von Standards, die definiert wurden, um Informationen darüber auszutauschen, wer ein Benutzer ist, welche Attribute er hat, und um Ihnen die Möglichkeit zu geben, Zugriff auf etwas zu gewähren / zu verweigern oder sogar eine Authentifizierung anzufordern.

Bei OAuth geht es mehr darum, den Zugriff auf etwas zu delegieren. Sie erlauben im Grunde jemandem, so zu handeln, wie Sie es sind. Es wird am häufigsten verwendet, um Zugriffs-APIs zu gewähren, die etwas für Sie tun können.

Das sind zwei völlig verschiedene Dinge.


Einige Beispiele, die helfen könnten.

OAuth denke an ein Twitter. Nehmen wir an, Sie verwenden Google Buzz und Twitter und möchten eine App schreiben, um die beiden synchron zu halten. Grundsätzlich können Sie Vertrauen zwischen Ihrer App und Twitter herstellen. Wenn Sie die App zum ersten Mal mit Twitter verknüpfen, werden Sie klassisch aufgefordert, sich bei Twitter anzumelden. Anschließend wird das Bestätigungsfeld angezeigt, in dem Sie gefragt werden, ob Sie Zugriff auf «Ihren App-Namen» gewähren möchten. Sobald Sie auf "Ja" klicken, wurde die Vertrauensstellung hergestellt und Ihre App kann nun wie Sie auf Twitter agieren. Es kann Ihre Beiträge lesen und neue erstellen.

SAML - Denken Sie für SAML an eine Art "Vereinbarung" zwischen zwei nicht verwandten Mitgliedschaftssystemen. In unserem Fall können wir US Airways und Hertz verwenden. Es gibt keine gemeinsamen Anmeldeinformationen, mit denen Sie von einem Standort zum anderen gelangen können. Angenommen, Hertz möchte US Airways einen "Deal" anbieten. (Zugegeben, ich weiß, dass dies ein extremes Beispiel ist, aber ertrage es mit mir). Nach dem Kauf eines Fluges bieten sie ihren Vorsitzenden einen kostenlosen Mietwagen an. US Airways und Hertz würden eine Art Vertrauen aufbauen und den Benutzer identifizieren. In unserem Fall wäre unsere "Verbund-ID" die E-Mail-Adresse, und es wäre eine Einbahnstraße des Vertrauens. Hertz vertraut darauf, dass der US Airways-Identitätsanbieter ein Token liefert, das genau und sicher ist. Nach der Buchung des Fluges würde der US Airways-Identitätsanbieter einen Token generieren und angeben, wie er den Benutzer authentifiziert hat, sowie "Attribute" über die Person in unserem Fall. Das wichtigste Attribut wäre seine Statusstufe in US Airways. Sobald der Token ausgefüllt wurde, übergibt er ihn über eine Referenz oder wird in einer URL verschlüsselt. Sobald wir bei Hertz angekommen sind, überprüft er den Token, validiert ihn und kann nun den kostenlosen Mietwagen zulassen.

Das Problem bei diesem SAML-Beispiel ist, dass es nur ein spezieller Anwendungsfall von vielen ist. SAML ist ein Standard und es gibt fast zu viele Möglichkeiten, ihn zu implementieren.


Wenn Sie sich nicht für die Autorisierung interessieren, können Sie auch fast argumentieren, dass die Authentifizierung über SAML und OpenID bestätigt wird .


4
Ich verstehe den Unterschied immer noch nicht. "Zugriff gewähren / verweigern" und "Zugriff auf APIs gewähren" klingen für mich genauso. Können Sie zwei Beispiele nennen, die ähnlicher sind, damit ich die Unterschiede sehen kann? Warum konnten wir SAML nicht verwenden, um Vertrauen zwischen Ihrer App und Twitter herzustellen? Oder warum konnten Sie OAuth for Hertz nicht verwenden, um USAirways über das Sonderangebot zu informieren?
Tim Cooper

3
Ich verstehe es irgendwie, aber ich kann immer SSO mit OAuth machen (indem ich den Zugriff auf eine API anfordere, die Identität bereitstellt). Bedeutet das, dass OAuth alles kann, was SAML kann und mehr?
Dirk

@Dirk Sie haben fast Recht, dh wir können die Identität des Benutzers mithilfe von OAuth ermitteln. Viele Anwendungen fordern eine Anmeldung über Google, Facebook, GitHub an, um die Identität des Benutzers und andere Attribute zu erhalten, damit er in seine Anwendungen aufgenommen werden kann. Es ist jedoch wahr, dass wir mit OAuth mehr erreichen können, als nur Identität zu erlangen.
Chirag Soni

39

Schauen Sie sich diese einfache Erklärung an, die hier zusammengefasst ist:

Viele Leute sind verwirrt über die Unterschiede zwischen SAML, OpenID und OAuth, aber es ist eigentlich sehr einfach. Obwohl es einige Überlappungen gibt, gibt es hier eine sehr einfache Möglichkeit, zwischen den drei zu unterscheiden.

OpenID - Single Sign-On für Verbraucher

SAML - Single Sign-On für Unternehmensbenutzer

OAuth - API-Autorisierung zwischen Anwendungen

Für Leute, die mit OO-Designmustern vertraut sind, gibt es meiner Meinung nach eine schöne Folge von Wrapper-Mustern . Denken Sie an Fassaden- , Dekorations- und Proxy- Muster. Grundsätzlich sind diese alle gleich, sie sind nur Wrapper ... Der Unterschied ist die Absicht jedes Musters .

In ähnlicher Weise ermöglichen SAML, OAuth und OpenID unterschiedliche Absichten über einen gemeinsamen zugrunde liegenden Mechanismus , der für eine private Interaktion an einen Dienstanbieter / eine Identitätsbehörde umgeleitet wird, gefolgt von einer Umleitung an die ursprüngliche Drittanbieter-App.

Wenn Sie sich im Internet umschauen, werden Sie feststellen, dass sich die Funktionen der Protokolle überschneiden. Die Authentifizierung über OAuth ist durchaus sinnvoll. SSO über OAuth ist jedoch möglicherweise nicht sehr sinnvoll, da SAML und OpenID speziell auf die Verbundidentität ausgerichtet sind.

Für die Frage selbst klingt SAML im Unternehmenskontext angemessener als OAuth für SSO . Ich wette, wenn Sie sich die Apps von Drittanbietern ansehen, die Sie in Ihre Unternehmensidentitäten integrieren möchten, werden Sie feststellen, dass sie bereits für die Integration in SAML / LDAP / Radius usw. konzipiert sind. IMO OAuth eignet sich besser für die Internetinteraktion zwischen Anwendungen oder möglicherweise Anwendungen, die eine serviceorientierte Architektur in einer großen Unternehmensumgebung umfassen.

Autorisierungsregeln können in einer Unternehmensumgebung auch auf andere Weise festgelegt werden. LDAP ist hierfür ein gängiges Werkzeug. Das Organisieren von Benutzern in Gruppen und das Zuordnen von Anwendungsberechtigungen zur Gruppenmitgliedschaft ist ein weit verbreiteter Ansatz. In diesem Fall kann LDAP auch zur Authentifizierung verwendet werden. Active Directory ist ein gutes Beispiel, obwohl ich OpenLDAP bevorzuge.


1
Vielen Dank für die Aktualisierung des Links @Sundeep
Quickshiftin

Link aktualisiert, jedoch ist die Zusammenfassung, die bereits in der Antwort enthalten war, dieselbe.
Quickshiftin

OpenID basiert nur auf oAuth. oAuth unterstützt keine eigene Benutzeroberfläche. OpenId macht das für uns. Es gibt keinen anderen Unterschied zwischen oAuth und OpenID
Es ist eine Falle

@ It'satrap nicht wahr; OpenID über Authentifizierung, OAuth über Autorisierung, sie teilen jedoch einen ähnlichen Mechanismus (Browser-Umleitung). Beides hat nicht viel mit einer Benutzeroberfläche zu tun ... Siehe auch diese Antwort . Sie können auch hier schauen . Sie können meine Antwort auch noch einmal lesen, um weitere Informationen zu erhalten, haha.
Quickshift im

1
@ It'satrap Vielleicht möchten Sie sich die OpenId-Spezifikation " Authentifizierung auf Basis von OAuth 2.0" ansehen . und auch die OAuth 2.0-Spezifikation "Das OAuth 2.0- Autorisierungsframework " ... Auch hier dient eines zur Authentifizierung , das andere zur Autorisierung . Das letztere für das erstere zu nutzen ist in Ordnung, da sie ein gemeinsames zugrunde liegendes Paradigma teilen (zum 3. oder 4. Mal habe ich es gesagt, lol). Alles in meiner unveränderten Antwort zusammengefasst. Sie sollten lernen, wie man Bruder liest.
Quickshiftin

3

Guter guter Artikel hier

Geben Sie hier die Bildbeschreibung ein

SAML (Security Assertion Markup Language) ist eine Reihe von Standards für Single Sign On (SSO), Federation und Identity Management.

Beispiel : Ein Benutzer (Auftraggeber) authentifiziert sich bei einer Flugbuchungswebsite, AirFlyer (Identitätsanbieter), die SSO über SAML mit einer Shuttle-Buchungswebsite konfiguriert hat, Shuttler (Dienstanbieter). Nach der Authentifizierung bei Flyer kann der Benutzer Shuttles bei Shuttler buchen, ohne dass eine Authentifizierung erforderlich ist

OAuth (Open Authorization) ist ein Standard für die Autorisierung von Ressourcen. Es geht nicht um Authentifizierung.

Beispiel : Eine mobile App für die gemeinsame Nutzung von Fotos (OAuth-Verbraucher), mit der Benutzer Fotos von ihrem Instagram-Konto (OAuth-Anbieter) importieren können, die ein temporäres Zugriffstoken oder einen Schlüssel an die App für die gemeinsame Nutzung von Fotos sendet, die nach einigen Stunden abläuft.


2

SAML hat eine Vielzahl von "Profilen" zur Auswahl, mit denen andere Benutzer sich bei Ihrer Site "anmelden" können. SAML-P oder SAML Passive sind sehr verbreitet und recht einfach einzurichten. WS-Trust ist ähnlich und ermöglicht auch den Zusammenschluss von Websites.

OAuth ist für die Autorisierung vorgesehen. Hier können Sie mehr lesen:

Was ist der Unterschied zwischen OpenID und OAuth?


Ich habe Mühe, den Unterschied zwischen "Anmelden" und "Autorisieren" zu verstehen. Können Sie ein Beispiel geben, das den Unterschied veranschaulicht?
Tim Cooper

@ TimCooper "Login" ist eine lose Terminologie für die Authentifizierung, während "Authorize" eine gute Autorisierung ist ... Ein Beispiel für Ihre Anfrage
Quickshift am

1
@ Quickshiftin Okay, ich verstehe diesen Unterschied. Ihre Antwort scheint zu implizieren, dass SAML die Authentifizierung durchführt, während OAuth die Autorisierung durchführt. Ist das korrekt? Oder machen beide beides - (in diesem Fall weiß ich immer noch nicht, was der Unterschied ist).
Tim Cooper

1
@ TimCooper Die Protokolle verfügen über einige überlappende Funktionen. OAuth zielt auf die Autorisierung ab, unterstützt jedoch auch die Authentifizierung . SSO im Unternehmenskontext ist etwas, für das SAML speziell entwickelt wurde. Auf der anderen Seite unterstützt SAML auch die Autorisierung. Der Kontext ist der wichtigste Faktor bei der Entscheidung, welche Technologie verwendet werden soll. Letztes Jahr habe ich eine Erweiterung für Expression Engine geschrieben, die SimpleSAMLPhp verwendet, um Benutzer anhand eines Kerberos-Backends zu authentifizieren und dann Autorisierungsregeln von einem LDAP-System aus zu suchen. Es ist eine verrückte Welt da draußen!
Quickshiftin

2

Sie behandeln einen subtilen Anwendungsfall

  • SAML - Freigabe von Anmeldeinformationen (z. B. SSO) eines Benutzers an verschiedene Dienstanbieter (z. B. Web oder Webdienst)
  • OAuth - Ein Benutzer, der eine App delegiert, um im Namen seiner Person auf eine Ressource zuzugreifen


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.