Mehrere Webseiten über ein Login System organisieren?
Ich hab mehrere Webseiten die teils über verschiedene Server verstreut sind und es wäre ziemlich lästig für jede ein eigenes zu machen also hab ich beschlossen sowas ähnliches wie oAuth nur mit PHP zu bauen, am besten so zweckmäßig wie möglich um das ganze zu erleichtern. Kann man das Konzept als fertig bezeichnen oder muss man da noch was dran ändern?
Dass man sich anmelden kann wird man auf die anmeldeseite geleitet, man gibt seine Daten ein und man wird auf die eigentliche Seite zurückgeleitet
um einen Benutzer anzumelden greift der dienst als erstes auf einen langen string zurück nennen wir es mal API Token. dieser wird während der nutzer auf die anmeldeseite geleitet wird mit post übergeben um zum einen sicherzustellen dass die webseite autorisiert dazu ist daten anzufragen und zum anderen dass das login system weiß wohin es den token und den Nutzer nach der anmeldung leiten soll. Dann meldet sich der nutzer auf der loginseite n und der nutzername und das passwort wird validiert etc. danach stellt der authentifizierungsserver das access Token aus, was beim weiterleiten wieder zurückgepostet wird. Dieses access token wird dann beim nutzer als cookie gespeichert und der Dienst der dann die Zeichenkette erhalten hat fragt dann die benötigten daten(nutzername, geburtsdatum etc.) mit curl von autentifizierungsserver ab und somit ist der nutzer angemeldet.
Das heißt ich müsste das script was prüft welchen Benutzername man hat muss mit jedem einzelnen Seitenaufruf erneut mittels dem access token den nutzernamen anfragen, eventell kann man das aber auch über nen session cookie mit nutzername regeln
Also: kann man das umsetzen oder habe ich was vergessen?
3 Antworten
Mache doch eine extra Datenbank nur für die Zugangsdaten/Sessions, die dann von jeder Website abgefragt wird!? o_O
Wenn man dann auf einer von den Seiten eingeloggt ist, ist man auch direkt auf allen anderen Seiten eingeloggt, bzw. friegeschaltet.
Also wenn ich Deine Frage richtig verstanden habe!? Also man loggt sich auf einer von den 5 Websites ein und hat auf alle 5 Websites Zugriff, da bereits angemeldet - oder?! o_O
das ist ne gute idee aber wie soll ich das umsetzen? Die Webseiten wissen ja nichts voneinander, eine webseite auf der der nutzer vorher nicht war weiß ja praktisch nichts, ich meine wie soll die webseite wissen wer die person ist ohne irgendeinen Anhaltspunkt? Gibt es sowas wie seitenübergreifende cookies in PHP?
Erwäge, alle Server in ein VPN zu setzen, und deren Dateisystem mittels über Netzwerk eingebundene Laufwerke durch das VPN an einem Punkt zugänglich zu machen.
Damit hast du zentralen Zugang zu allen Dateien, verteilt über alle Computer. Der Computer mit Zugang zu allen Dateien kann dann auch dein üblicher Arbeitsplatzcomputer sein.
Für entsprechende Weiterleitung zu den jeweiligen Servern für User könntest du dir einen "gatekeeper"-geeigneten Server anschauen, z.B. nginx.
Mehrere Webseiten über ein login system organisieren?
Leg eine zentrale Datenbank an, in der Login und PW gespeichert werden. Zusätzlich werden bei jedem User die URLs der Seiten abgespeichert, für die er sich einloggen darf.
Das Loginformular sieht dann so aus:
<form method="post">
<input type="hidden" name="host" value="<?=$_SERVER['SERVER_NAME']?>">
<input name="user">
<input name="pw">
<input type="submit">
</form>
In der Abfrage überprüfst Du, ob der User $_POST['user'] die Berechtigung hat, sich auf der Seite $_POST['host'] anzumelden. Wenn ja setzt du auf der Ressource $_POST['host'] eine session variable $_SESSION['login'] == TRUE, ansonsten $_SESSION['login'] == FALSE.
Alex
wenn ich eine zentrale Datenbank verwende wissen nutzer nicht dass sie auf anderen seiten einen account haben dann versuchen sie vielleicht sich da einen neuen account zu erstellen und wundern sich warum ihre email adresse schon vergeben ist
Auch das ist kein Problem. Ein User kann sich mehrmals mit derselben Adresse anmelden, aber nur einmal auf jeder Seite. Die Datenbank sieht dann z. B. so aus:
Mail | PW | Webseite
-----------------+-----+-----------
info@example.org | XYZ | seite1.tld
-----------------+-----+-----------
info@example.org | ABC | seite2.tld
-----------------+-----+-----------
Registriert sich der User mit info@example.org erneut auf seite1.tld oder auf seite2.tld gibt es einen Fehler ("bereits registriert"), da es die Mail-Webseite-Kombinationen info@example.org plus seite1.tld sowie info@example.org plus seite2.tld bereits gibt.
Registriert sich der User mit info@example.org jedoch auf seite3.tld, geht das problemlos, da es die Mail-Webseite-Kombination info@example.org plus seite3.tld noch nicht gibt. Die Datenbank sieht danach dann so aus:
Mail | PW | Webseite
-----------------+-----+-----------
info@example.org | XYZ | seite1.tld
-----------------+-----+-----------
info@example.org | ABC | seite2.tld
-----------------+-----+-----------
info@example.org | 123 | seite3.tld
-----------------+-----+-----------
theoretisch könnte man ja hergehen und den input von host ändern bevor man das Formular verschickt
theoretisch könnte man ja hergehen und den input von host ändern bevor man das Formular verschickt
Ja und?
Der User "Otto" darf sich laut deiner Datenbank auf der Seite example.org anmelden. Was hat er davon, wenn er im Formular den input von Host zu "Volksbank.de" ändert?
wenn ich eine zentrale Datenbank verwende wissen nutzer nicht dass sie auf anderen seiten einen account haben dann versuchen sie vielleicht sich da einen neuen account zu erstellen und wundern sich warum ihre email adresse schon vergeben ist