SSO mit CAS oder OAuth?


184

Ich frage mich, ob ich das CAS- Protokoll oder OAuth verwenden soll + einen Authentifizierungsanbieter für die einmalige Anmeldung verwenden soll.

Beispielszenario:

  1. Ein Benutzer versucht, auf eine geschützte Ressource zuzugreifen, wird jedoch nicht authentifiziert.
  2. Die Anwendung leitet den Benutzer zum SSO-Server weiter.
  3. Bei Authentifizierung erhält der Benutzer ein Token vom SSO-Server.
  4. Das SSO leitet zur ursprünglichen Anwendung weiter.
  5. Die ursprüngliche Anwendung vergleicht das Token mit dem SSO-Server.
  6. Wenn das Token in Ordnung ist, wird der Zugriff zugelassen und die Anwendung kennt die Benutzer-ID.
  7. Der Benutzer führt eine Abmeldung durch und wird gleichzeitig von allen verbundenen Anwendungen abgemeldet (einmalige Abmeldung).

Soweit ich weiß, wurde CAS genau dafür erfunden. CAS-Clients müssen das CAS-Protokoll implementieren, um den Authentifizierungsdienst verwenden zu können. Jetzt frage ich mich, ob ich CAS oder OAuth am Client (Verbraucher) verwenden soll. Ist OAuth ein Ersatz für diesen Teil von CAS? Sollte OAuth als neuer De-facto-Standard bevorzugt werden? Gibt es einen einfach zu verwendenden (nicht Sun OpenSSO!) Ersatz für den Authentifizierungsteil von CAS, der verschiedene Methoden wie Benutzername / Passwort, OpenID, TLS-Zertifikate ... unterstützt?

Kontext:

  • Verschiedene Anwendungen sollten auf der Authentifizierung des SSO-Servers basieren und etwas Sitzungsähnliches verwenden.
  • Die Anwendungen können GUI-Webanwendungen oder (REST-) Dienste sein.
  • Der SSO-Server muss eine Benutzer-ID bereitstellen, die erforderlich ist, um weitere Informationen über den Benutzer wie Rollen, E-Mail usw. von einem zentralen Benutzerinformationsspeicher abzurufen.
  • Single Sign-out sollte möglich sein.
  • Die meisten Clients sind in Java oder PHP geschrieben.

Ich habe gerade WRAP entdeckt , das der OAuth-Nachfolger werden könnte. Es ist ein neues Protokoll, das von Microsoft, Google und Yahoo spezifiziert wurde.

Nachtrag

Ich habe erfahren, dass OAuth nicht für die Authentifizierung entwickelt wurde, auch wenn es zur Implementierung von SSO verwendet werden kann, sondern nur zusammen mit einem SSO-Dienst wie OpenID.

OpenID scheint mir das "neue CAS" zu sein. CAS hat einige Funktionen, die OpenID vermisst (wie Single Sign-Out), aber es sollte nicht zu schwierig sein, die fehlenden Teile in einem bestimmten Szenario hinzuzufügen. Ich denke, OpenID hat eine breite Akzeptanz und es ist besser, OpenID in Anwendungen oder Anwendungsserver zu integrieren. Ich weiß, dass CAS auch OpenID unterstützt, aber ich denke, dass CAS auf OpenID verzichtet.


6
Single Sign-Out ist ein Anti-Feature. Alle mir bekannten Benutzerstudien haben gezeigt, dass es für Anfänger und Power-User gleichermaßen leicht bis extrem verwirrend ist. Ich persönlich muss ein System verwenden, das täglich Single Sign-Out verwendet, und ich finde es unglaublich irritierend. Es ist fast nie das Verhalten, das ich will.
Bob Aman

16
Stimmen Sie nicht zu, dass Single Sign-Out ein Antifeature ist. Es hängt alles von den jeweiligen Anwendungen ab. Für Webanwendungen, die sich irgendwie aufeinander beziehen, z. B. Google Mail und Google Kalender, ist es sinnvoll, dass Sie sich von dem anderen abmelden, wenn Sie sich explizit von einem abmelden. In Fällen mit Apps, in denen keine offensichtliche "Beziehung" besteht, stimme ich Bob zu.
Ashwoods

6
Beachten Sie, dass diese Frage ursprünglich gestellt wurde, bevor OAuth 2.0 eingeführt wurde, sodass die Informationen zu OAuth möglicherweise nicht mehr korrekt sind.
Andrew

Antworten:


238

OpenID ist kein "Nachfolger" oder "Ersatz" für CAS, sie unterscheiden sich in Absicht und Implementierung.

CAS zentralisiert Authentifizierung. Verwenden Sie diese Option, wenn alle (wahrscheinlich internen) Anwendungen Benutzer auffordern sollen, sich bei einem einzelnen Server anzumelden (alle Anwendungen sind so konfiguriert, dass sie auf einen einzelnen CAS-Server verweisen).

OpenID dezentralisiert Authentifizierung. Verwenden Sie diese Option, wenn Ihre Anwendung die Anmeldung von Benutzern bei einem beliebigen Authentifizierungsdienst akzeptieren soll (der Benutzer gibt die OpenID-Serveradresse an - tatsächlich ist der Benutzername die URL des Servers).

Keine der oben genannten Handle-Berechtigungen (ohne Erweiterungen und / oder Anpassungen).

OAuth behandelt die Autorisierung, ist jedoch kein Ersatz für die herkömmliche Tabelle 'USER_ROLES' (Benutzerzugriff). Es behandelt die Autorisierung für Dritte.

Sie möchten beispielsweise, dass Ihre Anwendung in Twitter integriert wird: Ein Benutzer kann zulassen, dass er automatisch twittert, wenn er seine Daten aktualisiert oder neue Inhalte veröffentlicht. Sie möchten im Namen eines Benutzers auf einen Dienst oder eine Ressource eines Drittanbieters zugreifen, ohne sein Kennwort zu erhalten (was für den Benutzer offensichtlich unsicher ist). Die Anwendung bittet Twitter um Zugriff, der Benutzer autorisiert ihn (über Twitter), und dann hat die App möglicherweise Zugriff.

Bei OAuth geht es also nicht um Single Sign-On (noch um einen Ersatz für das CAS-Protokoll). Es geht nicht darum , zu steuern, auf was der Benutzer zugreifen kann. Es geht darum, den Benutzer steuern zu lassen, wie seine Ressourcen von Dritten zugegriffen werden kann. Zwei sehr unterschiedliche Anwendungsfälle.

Für den von Ihnen beschriebenen Kontext ist CAS wahrscheinlich die richtige Wahl.

[Aktualisiert]

Sie können SSO jedoch mit OAuth implementieren, wenn Sie die Identität des Benutzers als gesicherte Ressource betrachten. Dies ist im Grunde das, was 'Mit GitHub anmelden' und dergleichen tun. Wahrscheinlich nicht die ursprüngliche Absicht des Protokolls, aber es kann getan werden. Wenn Sie den OAuth-Server steuern und die Apps so einschränken, dass sie sich nur bei ihm authentifizieren, ist dies SSO.

Es gibt jedoch keine Standardmethode, um das Abmelden zu erzwingen (CAS verfügt über diese Funktion).


11
Obwohl es bei OAuth hauptsächlich um Autorisierung geht, kann es so verwendet werden, als wäre es ein zentraler Authentifizierungsserver. So wie das Google OAuth-Konto von vielen Websites (einschließlich SO) zur Authentifizierung verwendet wird, ohne tatsächlich einen Dienst des OAuth-Anbieters zu verwenden.
Amir Ali Akbari

1
Darüber hinaus bietet CAS , wie in der Antwort von Bertl erwähnt, OAuth jetzt sowohl als Client als auch als Server an.
Anthony O.

3
Ist diese Antwort jetzt noch relevant, da OAuth 2.0 existiert? Wie hat sich Ihre Meinung mit OAuth 2.0 geändert?
Andrew

6
OAuth 2.0 ist immer noch ein Autorisierungsprotokoll und kein Authentifizierungsprotokoll, aber man kann auf OAuth 2.0 aufbauen, um ein Authentifizierungsprotokoll zu erstellen, wie es Facebook / LinkedIn usw. getan haben. Die einzige standardisierte Erweiterung von OAuth 2.0, die Authentifizierung bietet, ist OpenID Connect, der designierte Nachfolger von OpenID
Hans Z.

48

Ich neige dazu, es so zu sehen:

Verwenden Sie CAS, wenn Sie das Benutzerauthentifizierungssystem steuern / besitzen und eine heterogene Gruppe von Servern und Apps unterstützen müssen, die eine zentralisierte Authentifizierung benötigen.

Verwenden Sie OAuth, wenn Sie die Benutzerauthentifizierung von Systemen unterstützen möchten, die Sie nicht besitzen / unterstützen (z. B. Google, Facebook usw.).


6
OpenID ist ein Authentifizierungsprotokoll, OAuth ist ein Autorisierungsprotokoll.
Zenw0lf

13

OpenID ist ein Authentifizierungsprotokoll, OAuth und OAuth WRAP sind Autorisierungsprotokolle. Sie können mit der hybriden OpenID-Erweiterung kombiniert werden .

Ich würde es sehr bevorzugen, wenn die Leute auf Standards aufbauen, die viel Schwung haben (mehr verfügbarer Support, einfachere Einbeziehung von Dritten), auch wenn sie nicht genau zu der jeweiligen Anwendung passen. In diesem Fall hat OAuth den Impuls, nicht CAS. Sie sollten in der Lage sein, alles oder zumindest fast alles zu tun, was Sie mit OAuth tun müssen. Zu einem späteren Zeitpunkt in der Zukunft sollte OAuth WRAP die Dinge weiter vereinfachen (es macht einige lohnende Kompromisse, indem ein Träger-Token verwendet und die Verschlüsselung auf die Protokollschicht übertragen wird), aber es steckt noch in den Kinderschuhen und in der Zwischenzeit OAuth wird wahrscheinlich den Job gut machen.

Wenn Sie sich für OpenID und OAuth entscheiden, stehen Ihnen und allen anderen, die sich in das System integrieren müssen, mehr Bibliotheken für mehr Sprachen zur Verfügung. Sie haben auch viel mehr Augäpfel, die sich die Protokolle ansehen und sicherstellen, dass sie wirklich so sicher sind, wie sie sein sollen.


8

Für mich besteht der eigentliche Unterschied zwischen SSO und OAuth in der Gewährung und nicht in der Authentifizierung, da ein Server, der OAuth implementiert, offensichtlich über eine solche Authentifizierung verfügt Authentifizierung (Sie müssen bei Google, OpenId oder Facebook angemeldet sein, damit OAuth mit der Client-App ausgeführt werden kann).

In SSO gewährt ein Hauptbenutzer / Systemadministrator dem Endbenutzer zuvor Zugriff auf eine Anwendung in der "SSO-App". In OAuth gewährt der Endbenutzer der Anwendung Zugriff auf seine "Daten" in der "OAuth-App".

Ich verstehe nicht, warum das OAuth-Protokoll nicht als Teil eines SSO-Servers verwendet werden konnte. Nehmen Sie einfach den Grant-Bildschirm aus dem Flow heraus und lassen Sie den OAuth-Server den Grant aus der Backing-Datenbank nachschlagen.


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.