Mein Unternehmen entwickelt derzeit eine Java-Webanwendung. Einige unserer Kunden haben interne SAML-Server (Identitätsanbieter?) Und haben darum gebeten, dass wir uns in sie integrieren. Vor kurzem habe ich darüber gelesen und mit OpenAM herumgespielt. Nach ungefähr 3 Tagen habe ich ein allgemeines Verständnis davon, aber es gibt immer noch einige Lücken in meinem Wissen. Ich hoffe, dass jemand dies für mich klären kann.
So stelle ich mir den Workflow eines Benutzers vor, der sich anmeldet.
Definieren wir den SAML-Server unserer Kunden als https://their.samlserver.com . Ein Benutzer kommt also zu unserer Webanwendung, um eine geschützte Ressource zu erhalten. Angenommen, die URL lautet http://my.app.com/something .
Wenn ich richtig liege, definiert my.app.com SAML als Dienstanbieter . Unsere Anwendung erkennt, dass sich dieser Benutzer anmelden muss. Anschließend präsentieren wir dem Benutzer eine Seite wie diese ...
<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
<input type="hidden" name="SAMLRequest" value="someBase64Data" />
<input type="submit" value="Submit" />
</form>
Und das someBase64Data
sollte eine base64
verschlüsselte Version davon sein ...
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="identifier_1"
Version="2.0"
IssueInstant="2004-12-05T09:21:59Z"
AssertionConsumerServiceIndex="0">
<saml:Issuer>http://my.app.com</saml:Issuer>
<samlp:NameIDPolicy
AllowCreate="true"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>
Also meine ersten paar Fragen.
Was soll der ID- Wert sein?
Und warum kann ich mich als Emittent deklarieren ?
Kennt der Identitätsanbieter mich? Vielleicht ist dies der Vertrauenskreis, den ich bei OpenAM gesehen habe . Und wenn es über mich Bescheid weiß, woher weiß es über mich Bescheid und was muss es wissen?
Nachdem der Benutzer diese Seite weitergeleitet hat, wird er zu einer Seite weitergeleitet, die vom IDP https://their.samlserver.com bereitgestellt wird . Sie authentifizieren sich auf dieser Seite und der IDP macht es magisch, die Authentifizierung zu validieren und den Benutzer nachzuschlagen. Nach erfolgreicher Authentifizierung sendet der IDP eine hier<samlp:Response>
definierte zurück .
Noch ein paar Fragen.
Wie <samlp:Response>
komme ich zunächst zu meiner Webanwendung zurück, damit ich sie überprüfen kann?
Und worauf sollte ich in dieser Antwort achten, um zu bestätigen, dass sie erfolgreich war? Wie sieht ein Fehler aus?
Wir verwenden derzeit die E-Mail-Adresse (LDAP), um Benutzer zu identifizieren. Daher werden wir diese wahrscheinlich aus der Antwort entnehmen und sie auf die gleiche Weise wie jetzt verwenden. Was sollte ich bei dieser Antwort noch beachten?
Nachdem wir diese Antwort auf Gültigkeit überprüft haben, können wir dem Benutzer eine Sitzung gewähren, wie wir es derzeit tun. Aber wenn sie sich abmelden möchten, gibt es dafür einen Workflow? Muss ich den IDP benachrichtigen, dass der Benutzer gegangen ist?
Und schließlich gibt es ein paar Themen, die in meiner Lektüre herumgeworfen wurden, und ich bin mir nicht sicher, wie sie in diesen Workflow passen. Sie sind Vertrauenskreis , Token und Artefakte .
Vielen Dank für jede Hilfe an alle. Ich habe in den letzten Tagen viele Informationen gefunden, und es ist möglich, dass ich sie nach etwas mehr Spielen zusammenfügen kann. Ich habe jedoch noch keinen einfachen Workflow-Artikel zu "Here's the Post" gefunden. Vielleicht liegt das daran, dass ich falsch liege, wie das funktioniert. Vielleicht liegt es daran, dass dies nicht so beliebt ist. Aber ich wollte wirklich sicherstellen, dass ich den Workflow habe, damit ich keinen entscheidenden Schritt in etwas so Wichtigem wie der Benutzerauthentifizierung verpasse.