Frage

Bei der Arbeit haben wir einen Web-App, dass wir mit anderer Unternehmens-Web-App mit Single Sign On mit SAML validiert Schnittstelle müssen werden. Unsere Web-Anwendungen sind in PHP geschrieben, und es ist offensichtlich irrelevant, welche Sprache Wahl der anderen Unternehmen verwendet. Dennoch habe ich braucht eine einfache API zu schreiben, dass dieses andere Unternehmen SOAP-Anforderungen an mit SAML-Anfragen senden kann, und erzeugt eine SAML-Antwort zurück. Ich habe aus drei Gründen es von Grund auf neu zu schreiben: 1) gibt es nicht wirklich scheinen viele Optionen für die SAML-Interaktionen in PHP geschrieben zu sein, selbst wenn ich wollte, 2) es begrenzt den Aufwand, der mit dem Hinzufügen von weiteren Dritt Komponente beteiligt sein würde, und 3) die Dinge von Grund auf neu erstellen in der Regel Blätter mich mit einem wesentlich besseren Verständnis und macht mich viel besser in der Lage, die Sache zu adaptieren in der Zukunft, wenn nötig.

Wie auch immer, ich bin ziemlich neu in SAML, SOAP und XML-Standards im Allgemeinen, also habe ich Art des Unterrichtens mich selbst, wie ich gehe. Ich habe die API so ziemlich komplett für unsere Zwecke bekommt, mit der Ausnahme, dass die anderen Unternehmen festgelegt haben, dass unsere Antwort erforderlich sein wird digital mit einem Zertifikat signiert werden (und der Anforderung wir in ähnlicher Weise erhalten wird digital signiert). So habe ich, um herauszufinden versucht, wie man Prozess / die XML-Signaturen erzeugen, aber ehrlich gesagt ist es alles ein wenig verwirrend als W3C-Spezifikationen nicht genau Unterhaltungslektüre sind.

Abschnitt 5.4.8 der

War es hilfreich?

Lösung

Signaturen XML-Verarbeitung ist nicht wirklich zu schwierig, wenn Sie sehr vertraut mit XML, aber es gibt viele Details, die als absolut Recht haben, oder die Dinge nicht funktionieren, so würde ich wahrscheinlich nicht meine eigenen versuchen zu schreiben Umsetzung in dieser Situation (ich habe es umzusetzen teilweise einmal, aber das war für einen anderen und besonderen Zweck, und trotzdem war es nicht eine vollständige Umsetzung).

Wie auch immer, ich weiß nicht viel über SAML wissen, aber ich weiß über XML und XML-Signaturen, vielleicht kann ich Ihnen einige der Art und Weise erhalten, indem Sie versuchen, Ihre Fragen zu beantworten.

Ein Signature Element bezieht sich auf einen bestimmten Teil eines XML-Dokuments, die digital signiert, in seinem SignedInfo Kind-Elemente ist. Das Reference geordnetes Element, dass (ich glaube, es kann viele Reference Elemente, die verkettet werden, wenn die Bytes bilden unterzeichnet werden, aber ich erinnere mich nicht sicher mehr) auf den Inhalt durch das URI Attribut. Die Transform Elemente beschreiben Transformationen auf die Bezug genommen wurde zum Inhalt vor, es zu Hashing; Sie müssen auf die Spezifikationen schauen, um herauszufinden, wie die Transformationsalgorithmen definiert sind. Das DigestMethod Element gibt den Hash-Algorithmus auf die Bytes anzuwenden, die das Ergebnis dieser Transformationsalgorithmen sind (beachten Sie, dass einer von ihnen ist immer Kanonisierung, dass wandelt XML in Bytes) und die DigestValue das Ergebnis, dass gibt Algorithmus verdauen.

Die eigentliche Signatur ist im SignatureValue Elemente und durch Anlegen des CanonicalizationMethod Elements Kanonisierungsprobleme erzeugt die Bytes zu erzeugen, und dann diese Bytes mit dem SignatureMethod signieren. Das KeyInfo Element erfahren Sie, wie der Schlüssel zur Verwendung finden.

Kanonisierung, die ein paar Mal oben erscheint, ist einfach eine Möglichkeit, ein XML-Dokument in Bytes zu konvertieren, so dass „gleichwertig“ XML-Dokumente die gleiche Folge von Bytes zu erzeugen. Dies wird in einer digitalen Signatur erforderlich, weil die Algorithmen auf Bytes und XML arbeiten kann durch eine Reihe von Vermittlern übergeben, die wahrscheinlich das ursprüngliche Bytes stört aber die Gleichwertigkeit behalten. Und verschiedene Kanonisierung Methoden für verschiedene Situationen benötigt werden: wenn Elemente aus Dokumenten extrahieren und in anderen platziert, müssen Sie exklusive Kanonisierung dass Streifen entfernt nicht benötigten Namespace-Definitionen, aber in anderen Fällen, die nicht richtig funktionieren können, so dass Sie stattdessen inklusive Kanonisierung benötigen, die Konserven all in-scope Namespaces.

Dies ist nur die Grundlagen. Es gibt eine Reihe von verschiedenen Optionen, wie eine XML-Signatur zu erzeugen, und wenn Sie Verifizierer eine Arbeits implementieren möchten, müssen Sie alle von ihnen betrachten. Da Sie in der Regel in XML neu sind, werde ich wiederhole nur meinen Rat etwas zu verwenden, die bereits vorhanden ist. Es ist eine interessante Lernerfahrung eine Spezifikation zu implementieren, aber oft ist es eine Verschwendung von Zeit, wenn Implementierungen bereits verfügbar ist.

Es ist der Dokumentation zu Signaturen.

Andere Tipps

Es gibt ein Beispiel in xmlseclibs.php in SimpleSAML . Es beruht auf dem OpenSSL-Modul die Krypto zu tun.

Ich würde ehrlich verwenden, dass lib oder Brücke zu java / tomcat, nur weil Interop Fragen kommen könnten am dass müßte möglicherweise debuggt werden,

  1. Sie können einen Blick auf dieses Java lib haben, um die SAML-Anfrage Beispiel zu unterzeichnen https: // github.com/jrowny/java-saml

  2. Zur Validierung der Signatur, die Sie installieren müssen SAML Tracer Addon https://addons.mozilla.org/en-US/firefox/addon/saml-tracer/

  3. Sie können Tool https://www.samltool.com/validate_logout_req.php vaalidate oder melden Sie die Anfrage https://www.samltool.com/sign_logout_req.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top