Administrator-Login via Twitter OAuth

Ein sicherlich bekanntes Problem: ein überschaubares Projekt im Web besteht aus einem öffentlichen Teil und einer Administrationsoberfläche für die Stellschrauben im Hintergrund. Und genau für diese braucht man eine Absicherung mittels Login. Nun gibt es diverse Möglichkeiten:

  • Admin-Scripte in separates Verzeichnis legen und dieses per htaccess und Basic Authentication schützen
  • Admin-Scripte mit hartkodiertem Zugangsschutz einsetzen, Benutzername und Passwort sind im Code gespeichert
  • Komplexe Benutzer-Logik mit Datenbankanbindung implementieren

Meine Idee war nun: Wenn der öffentliche Teil des Projektes sowieso ein Login mittels Twitter OAuth ermöglicht, könnte man doch die Administrationsoberfläche einfach dadurch absichern, dass deren Nutzung nur möglich ist, wenn ein spezieller Twitter-Account angemeldet ist. Wie sieht das im Detail aus?

Zunächst zu den Gründen, warum mir diese Variante sinnvoll erscheint: Man nutzt dazu Login-Mechanismen, die man sowieso schon implementiert hat, braucht weder Zugriff auf htaccess-Files noch Datenbanktabellen für Benutzer und Passwörter.

Wie funktioniert es? Man definiert einfach (zum Beispiel in einer Konfigurationsdatei) die Twitter-User-ID (oder auch mehrere), welche man als Administrator zulassen will. Der Administrator nutzt das „Login with Twitter“-Verfahren im öffentlichen Teil der Webseiten und beim Aufruf der Administrationsbereiche muss man lediglich prüfen, ob ein Twitter-User gerade angemeldet ist und ob dieser eine ID hat, welche als Administrator zugelassen wurde.

Um in PHP die OAuth-Login-Prozedur bei Twitter zu implementieren, empfiehlt sich beispielsweise Twitter OAuth von Chris Shiflett. Der dort vorgestellte Mechanismus, dass Benutzeranmeldungen lediglich in der Session gespeichert werden und nicht dauerhaft in der Datenbank, reicht für viele kleinere Projekte sicher vollkommen aus.

Ich selbst setze diese Anmeldeverfahren beim Kartenquiz und demnächst auch dessen Ableger MapGame ein und finde dies eine sehr effiziente Lösung für das oben geschilderte Problem.