© Golden Sikorka/Shutterstock.com
Authentifizierung und Autorisierung

Symfonys neues Securitysystem


Ein geschützter Bereich für eingeloggte Nutzer lässt sich mit Symfony schnell erstellen. Das neue Securitysystem ist unkompliziert und mächtig. Flexible Mechanismen zur Authentifizierung und Autorisierung können mit wenig Aufwand implementiert werden.

Nicht alle Webapplikationen sind für die Öffentlichkeit bestimmt. Mitunter sind einzelne Bereiche von Internetseiten oder ganze Portale nur für eingeloggte Benutzer zugänglich. Diese Benutzer haben dabei meist auch noch unterschiedliche Rechte. Man benötigt also Möglichkeiten zur Authentifizierung und Autorisierung. Ein Framework soll dem Entwickler typische Aufgaben erleichtern oder abnehmen. Es ist daher kein Wunder, dass Symfony unkomplizierte, aber flexible Werkzeuge für den Log-in-Prozess zur Verfügung stellt. Wir wollen uns das im Folgenden an einem konkreten Beispiel ansehen.

Was ist was?

Zunächst sollten wir noch die Begriffe Authentifizierung und Autorisierung klären. Sie klingen ähnlich, haben jedoch unterschiedliche Bedeutungen:

  • Authentifizierung beschäftigt sich mit der Frage „Wer bin ich?“. Es geht also darum, die Identität des Nutzers festzustellen.

  • Autorisierung beschäftigt sich mit der Frage „Was darf ich?“. Es wird überprüft, welche Rechte der Nutzer hat.

Die beiden Konzepte lassen sich auf viele verschiedene Arten implementieren. Im Web kommen dabei meist

Sessions zum Einsatz, die Informationen über den aktuellen Nutzer auf dem Server speichern und über ein Cookie im Browser referenziert werden. In Symfony muss der Entwickler jedoch nicht direkt mit Session und Cookie interagieren, sondern es existieren Klassen zur Abstraktion, die wir uns im Folgenden ansehen werden.

Die Nutzerklasse

Für die kommenden Beispiele wird eine Symfony-Webapplikation mit Doctrine und Maker Bundle benötigt. Ist noch keine vorhanden, lässt sich mit dem folgenden Kommando schnell ein Projekt aufsetzen:

composer create-project symfony/website-skeleton my-project

Weitere Details zur Installation finden sich in der Dokumentation von Symfony [1]. Es sollte dann noch mindestens eine Seite angelegt werden, damit wir auch etwas zum Absichern haben. Das Website-Skeleton bringt das Securitypaket, das für Authentifizierung und Autorisierung zuständig ist, gleich mit. Ansonsten kann es mit folgendem Befehl installiert werden:

composer require symfony/security-bundle

Nachdem diese Vorbereitungen abgeschlossen sind, legen wir als Erstes unsere User-Klasse an. Dabei hilft uns das Maker Bundle. Wir führen folgenden Befehl aus:

bin/console make:user

Dabei müssen wir ein paar Fragen beantworten. Wir nennen unsere Entität User, sagen, dass wir die Nutzerdaten in der Datenbank speichern wollen, wählen username als eindeutigen Identifikator und geben an, dass Passwörter gehasht werden sollen. Der Maker erstellt uns nun die Klassen User und UserRepository. Zudem wird in der Datei config/packages/security.yaml eine Konfiguration entsprechend unseren Angaben eingetragen. Die Klasse User besitzt die folgenden Attribute:

  • id

  • username

  • roles

  • password

Die Rollen dienen dazu, die Berechtigungen zu steuern. Es handelt sich dabei um Strings, die mit ROLE_ beginnen und beliebig benannt werden können. Wir könnten zum Beispiel eine Rolle ROLE_ADMIN anlegen. Zusätzlich zu den Rollen, die als JSON-Code in der Datenbank gespeichert werden, hat jeder Nutzer automatisch die Rolle ROLE_USER. Das wird erreicht, indem diese...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang