2012-07-10 11 views
12

Wir haben zwei separate Produkte, einschließlich Web-App und Server.So implementieren oder integrieren Sie Single Sign-On mit SAML und Shibboleth

Wir möchten Single Sign On für beide implementieren. Wenn ein Benutzer sich an einem Produkt angemeldet hat, kann er automatisch auf Ressourcen in dem anderen Produkt zugreifen, das ihm gehört.

Ich habe ein wenig erforscht und finde SAML ist ein guter Ansatz, den wir nehmen können, aber wir sind nicht sicher, wie wir fortfahren wollen.

Ist es eine gute Idee, einen eigenen Service Provider zu implementieren? Ich habe Shib SP angeschaut, aber wenn ich es in meine Produkte integrieren möchte, wird es auch nicht so einfach sein.

Also ich bin nur auf der Suche nach einigen Vorschlägen von Menschen, die ein ähnliches Problem zuvor begegnet sind.

Eine andere Frage ist, welche Ressource ich studieren kann, wenn ich einen SP mit OpenSaml implementieren muss? Es sieht so aus, als ob es nicht viele Tutorials oder Beispiele gibt, auf die ich mich beziehen kann.

Ich würde auch sehr geschätzt werden, wenn jemand nur einige große Verfahren oder Komponenten, die mein eigenes SP enthalten soll, aufzeigen kann.

EDIT 1:

Probieren Sie weitere Details zu dem, was ich will. Wir haben zwei separate Produkte. Momentan können wir die Benutzerdatenbank externalisieren. Zum Beispiel können unsere Produkte so konfiguriert werden, dass sie sich mit dem LDAP-Server oder einer anderen externen Benutzerdatenbank verbinden, solange sie einen Dienst ordnungsgemäß implementieren.

Jetzt ist unser Ziel, dass wir SSO für unsere beiden Produkte wünschen. Ein Szenario ist, dass wir unsere eigene SP-Komponente (entweder implementieren oder integrieren) in beiden Produkten haben. Der Kunde kann sein eigenes IdP haben. Mit einer gewissen Konfiguration kann unser SP eine Verbindung zu seinem IdP herstellen und von dort aus eine Authentifizierung durchführen, und der Benutzer muss sich nicht zweimal anmelden, um auf beide Produkte zugreifen zu können. Natürlich können wir ein Out-of-the-Box-IdP bereitstellen, wenn der Kunde es nicht hat.

Antwort

13

Die größte Schwierigkeit mit Shibboleth ist, dass es effektiv eine Referenzimplementierung der SAML v2.0 Spezifikation ist.

Für die meisten Routine-Installationen benötigen Sie jedoch nur sehr wenig von der SAML-Spezifikation, um einige Web-Apps für SSO zu aktivieren.

Aber da Shibboleth das Ganze mit all seinen Fähigkeiten implementiert, kann es ein Bär sein, zu konfigurieren.

Wir haben ein Projekt mit Shibboleth gemacht (und es war zugegebenermaßen ein Rand-Use-Case), und für mich war es zu der Zeit ein SAML-Neuling, dass es wirklich eine Aufgabe war, alles einzurichten und zu arbeiten.

Für unseren nächsten Stich, schaute ich auf die SAML spec für SSO über das Web-Profil. Wenn Sie es lesen, ist es eigentlich ziemlich einfach für diesen eingeschränkten Anwendungsfall. Und wir entschieden, dass wir, anstatt Shibboleth erneut zu verwenden, unseren eigenen IdP und SP mit den OpenSAML-Bibliotheken schreiben würden.

Könnten wir Shibboleth schneller arbeiten lassen? Wahrscheinlich. Aber ich glaube nicht, dass wir das verstehen würden, was wir selbst tun. Ein bisschen Not-Invented-Hier, sicher, aber dieses Zeug ist verwirrend genug, wenn du die Software und das Vokabular verstehst, und viel weniger, wenn du es nicht tust. Und SAML ist voller neuer Vokabeln.

Sie können auch SimpleSAML als IdP verwenden und Ihren eigenen SP für Ihre Web-Apps schreiben. SimpleSAML ist in PHP, aber es ist ein bisschen benutzerfreundlicher. Sie können es einfach als eigenständigen Apache-Service behandeln.

Ich werde sagen, dass unser SP in etwa 1000 Zeilen Javadoc'd Code wiegt, aber es ist vor allem Verkabelung OpenSAML Zeug zusammen und einige Dienstprogramm Zeug. In Wahrheit ist es nicht so beängstigend. Seien Sie jedoch darauf vorbereitet, signierte XML-Blobs wirklich zu lesen.

Es ist frustrierend, dass dies wirklich nicht einfacher ist, aber es ist ein bisschen wie ein Huhn/Ei was in Bezug auf Adoption usw.

Und wenn nichts davon zu Ihnen passt, können Sie bei OAuth2 aussehen und einige seiner Profile.

+0

Ich habe genau das gleiche Gefühl wie du, wenn ich versuche, eine Demo mit Shib SP und IdP einzurichten. Es ist zu mächtig und flexibel. Ich habe so viel Zeit damit verbracht, ihr Wiki zu lesen und andere Ressourcen zu googeln. Es gibt viele neue Vokabulare, die wir verstehen müssen.Vielen Dank für Ihre Nachricht. Es macht mich mutiger, den eigenen SP zu implementieren. Können Sie mir einige Ressourcen oder Beispiele mitteilen, auf die Sie beim Schreiben Ihres eigenen SP-Codes verwiesen haben? Ich sehe nicht viel im Internet. – performanceuser

+0

Ich googelte herum und stieß auf http://code.google.com/p/websso/. Ich habe das nicht selbst benutzt, aber als erster Schnitt sieht es ziemlich gut aus. Es hat sowohl SP- als auch IdP-Seiten der Gleichung. Die Svn-Kasse ist ... groß. Ich fand auch http://www.capcourse.com/Library/OpenSAML/index.html, aber sein Code hat keine (offensichtliche) Lizenz, also habe ich ihn nicht zu genau betrachtet. Aber es hat generische SAML-Beispiele, die Sie möglicherweise betrachten können, wenn Sie nicht weiterkommen. –

+0

Vielen Dank. Ich werde mir diese Beispiele ansehen. – performanceuser

3

Wenn Sie nur SSO zwischen zwei Produkten implementieren möchten, denke ich, dass es einfacher ist, etwas von Grund auf neu zu erstellen. Wenn es Java ist, ist Shibboleths OpenSaml eine sehr gute lib.

Wenn Sie anfangen, mehr Zeug und einige komplexe Szenarien zu implementieren, ist die Entscheidung für etwas, das bereits gebaut wurde, die beste Wahl. Sie sollten sich auch einiger Dinge bewusst sein, die Sie wahrscheinlich pro System schreiben werden (z. B. Assertionsgenerierung, XML-DSIG, Validierung usw.).

Auf den ersten Blick scheint es so, als seien die bereits gebauten Produkte viel zu komplex oder schwer zu skalieren oder an Ihre speziellen Bedürfnisse anzupassen. Aber Ihre Entwicklung beim Schreiben von Connectors und Implementierungen kann belohnt werden, wenn Sie alle SAML-Funktionen explodieren lassen möchten.

Es wäre aber sehr hilfreich, wenn Sie detaillierter erklären können, was Sie erreichen möchten; Ich fühle, dass Ihre Frage ziemlich offen ist ...

+0

Danke. Ich habe meinen ursprünglichen Beitrag aktualisiert. Ich stimme zu, dass die Frage offen ist. Ich habe versucht, so viele Details wie möglich zur Verfügung zu stellen. – performanceuser

+0

@performanceuser Ihr Update gegeben, und wenn es nicht darüber hinaus geht, würde ich empfehlen, einen einfachen SAML-Assertion-Endpoint zu schreiben, der die ganze Logik ausführt und Ihren Kunden auffordert, dort zu posten, um die Anmeldung auf Ihrer Seite zu ermöglichen. Sie müssen sich immer noch um einige Dinge kümmern (z. B. Abmeldung, Sicherheit), aber ich denke, die Zeit für das Schreiben und die Kenntnis der Einschränkung ist geringer als die, die Sie benötigen, um das gesamte Shibo-Produkt zu verstehen. –

+0

Danke. Ich werde versuchen, eins zu implementieren. Können Sie mir einige Ressourcen oder Beispiele zur Implementierung von SP mit openSAML mitteilen? Ich sehe nicht viel im Internet. – performanceuser

0

Ich habe keine persönlichen Erfahrungen mit Shibboleth Service Provider, aber ich entwickle derzeit Architektur, die Shibboleth IdP, Shibboleth Discovery Service und Guanxi Service Provider verwendet. Die Integration eines leichtgewichtigen Guard-Moduls vom Guanxi-Service-Provider mit Java-Webapp ist ein Kinderspiel und Sie können auf einfache Weise Shibboleth-basierte Architektur erhalten, ohne Ihre eigenen Module zu schreiben. Es gibt localhost tutorial für die Einrichtung von Guanxi SP, überspringen Sie einfach die Teile über Guanxi WAYF und IdP und verwenden Sie Shibboleth Komponenten an ihrer Stelle.

+0

Danke für Ihre Information. Dies ist das erste Mal, dass ich von Guanxi hörte. Weißt du, ob es kostenlos ist? – performanceuser

+0

[1]: https://github.com/guanxi/guanxi-sp-engine/blob/master/README [2]: https://github.com/guanxi/guanxi-sp-guard/blob/ Master/README – Erwin