Ich bin gerade dabei eine Intranet Plattform (Nachfolgend "Hub") zu planen, die verschiedene Anwendungen verbinden/zusammenfassen soll.
Diese Anwendungen bieten unterschiedliche Schnittstellen zur Kommunikation, teils HTTP, teils WebDav, ggf. weitere.
Die Benutzer stammen von einem LDAP Provider welcher jeweils getrennt mit der entsprechenden Plattform verknüpft ist.
Auch mein Hub wird eine Authentifizierung darüber erfordern. Insgesamt hat jedenfalls jedes Interface seinen eigenen Auth Layer, basierend auf den selben Nutzerdaten.
|---| <-> Wordpress
|...| <-> Shopware
|Hub| <-> PM-Tool
|...| <-> WebDav
|---| <-> FTP-Server
Nun stehe ich etwas an, wie ich das nun sicherheitstechnisch am besten anstelle.
Grundsätzlich wäre wohl OAuth oder SSO das Mittel der Wahl.
Leider bieten manche angebundene Systeme dafür keine Unterstützung.
Und zumindest OAuth wäre wohl auch eher eine Qual (Login/Erlauben -> Login/Erlauben -> Login/Erlauben -> ... bis alle Systeme autorisiert sind).
Eine Authentifizierung via Username/Password funktioniert jedoch bei allen Systemen.
Ich befürchte daher, es bleibt wohl nichts anderes übrig, als diese Daten beim Login auf dem Server zwischen zu speichern.
Dass das ganze nicht sauber ist, ist mir klar.
Um es aber zumindest etwas sicherer zu machen, habe ich mir folgenden Ablauf überlegt:
1. Client übermittelt Login-Formular des Hubs
2. Username und Password wird AES256(?) encrypted in der kurzlebigen (15min) Session abgelegt.
3. Client erhält zusätzlich zur Session-ID den Decryption Key zurück. Auf dem Server wird dieser gelöscht.
4. Nun muss der Browser mit jeder Request nicht nur die Session-ID mitgeben, sondern auch den Decryption Key, damit der Server die zwischengespeicherten Credentials lesen kann und in weiterer Folge mit den Systemen kommunizieren.
5. (Sinnvoll?) Mit jeder Decryption wird wieder ein neuer Key generiert und der alte damit wertlos. (Vermutlich zu schlechte Performance)
Insgesamt denke ich mir, dass das relativ bulletproof ist. Beide Parteien haben Informationen, die für sich alleine wertlos sind.
In etwa wie ein Cloud-Passwordmanager mit Master-Passwort.
Um das zu knacken, müsste man nicht nur Zugriff auf die Session Dateien erhalten, sondern auch noch den Decryption Key abfangen.
Da kann man auch gleich die initiale Login-Payload abfangen. So zumindest meine Theorie.
Mir bleibt eh nichts anderes übrig. Möchte das ganze aber dennoch in diesem Rahmen bestmöglich lösen.
Wollte deshalb kurz eure Meinung dazu einholen, ob sich hier vielleicht noch ein Denkfehler versteckt oder Optimierung anbietet.
Danke!
Diese Anwendungen bieten unterschiedliche Schnittstellen zur Kommunikation, teils HTTP, teils WebDav, ggf. weitere.
Die Benutzer stammen von einem LDAP Provider welcher jeweils getrennt mit der entsprechenden Plattform verknüpft ist.
Auch mein Hub wird eine Authentifizierung darüber erfordern. Insgesamt hat jedenfalls jedes Interface seinen eigenen Auth Layer, basierend auf den selben Nutzerdaten.
|---| <-> Wordpress
|...| <-> Shopware
|Hub| <-> PM-Tool
|...| <-> WebDav
|---| <-> FTP-Server
Nun stehe ich etwas an, wie ich das nun sicherheitstechnisch am besten anstelle.
Grundsätzlich wäre wohl OAuth oder SSO das Mittel der Wahl.
Leider bieten manche angebundene Systeme dafür keine Unterstützung.
Und zumindest OAuth wäre wohl auch eher eine Qual (Login/Erlauben -> Login/Erlauben -> Login/Erlauben -> ... bis alle Systeme autorisiert sind).
Eine Authentifizierung via Username/Password funktioniert jedoch bei allen Systemen.
Ich befürchte daher, es bleibt wohl nichts anderes übrig, als diese Daten beim Login auf dem Server zwischen zu speichern.
Dass das ganze nicht sauber ist, ist mir klar.
Um es aber zumindest etwas sicherer zu machen, habe ich mir folgenden Ablauf überlegt:
1. Client übermittelt Login-Formular des Hubs
2. Username und Password wird AES256(?) encrypted in der kurzlebigen (15min) Session abgelegt.
3. Client erhält zusätzlich zur Session-ID den Decryption Key zurück. Auf dem Server wird dieser gelöscht.
4. Nun muss der Browser mit jeder Request nicht nur die Session-ID mitgeben, sondern auch den Decryption Key, damit der Server die zwischengespeicherten Credentials lesen kann und in weiterer Folge mit den Systemen kommunizieren.
5. (Sinnvoll?) Mit jeder Decryption wird wieder ein neuer Key generiert und der alte damit wertlos. (Vermutlich zu schlechte Performance)
Insgesamt denke ich mir, dass das relativ bulletproof ist. Beide Parteien haben Informationen, die für sich alleine wertlos sind.
In etwa wie ein Cloud-Passwordmanager mit Master-Passwort.
Um das zu knacken, müsste man nicht nur Zugriff auf die Session Dateien erhalten, sondern auch noch den Decryption Key abfangen.
Da kann man auch gleich die initiale Login-Payload abfangen. So zumindest meine Theorie.
Mir bleibt eh nichts anderes übrig. Möchte das ganze aber dennoch in diesem Rahmen bestmöglich lösen.
Wollte deshalb kurz eure Meinung dazu einholen, ob sich hier vielleicht noch ein Denkfehler versteckt oder Optimierung anbietet.
Danke!
Kommentar