Ich frage mich, ob ich das CAS- Protokoll oder OAuth verwenden soll + einen Authentifizierungsanbieter für die einmalige Anmeldung verwenden soll.
Beispielszenario:
- Ein Benutzer versucht, auf eine geschützte Ressource zuzugreifen, wird jedoch nicht authentifiziert.
- Die Anwendung leitet den Benutzer zum SSO-Server weiter.
- Bei Authentifizierung erhält der Benutzer ein Token vom SSO-Server.
- Das SSO leitet zur ursprünglichen Anwendung weiter.
- Die ursprüngliche Anwendung vergleicht das Token mit dem SSO-Server.
- Wenn das Token in Ordnung ist, wird der Zugriff zugelassen und die Anwendung kennt die Benutzer-ID.
- 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.
quelle
Antworten:
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).
quelle
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.).
quelle
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.
quelle
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.
quelle
Alter Beitrag, aber das könnte nützlich sein:
CAS 3.5 unterstützt oAuth als Client und Server. Siehe: https://wiki.jasig.org/display/CASUM/OAuth
quelle
CAS
hier erwähnte der CAS-Server anstelle des CAS-Protokolls .