Mache dir das Leben nicht selbst schwer – Authorization Edition
- Stefan Joachimsthaler
- Softwarearchitektur
- 20. September 2026
Inhaltsverzeichnis
Mich hat diese Woche eine schlecht implementierte Autorisierungslogik einiges an Zeit gekostet. Ich habe bei einem Sport-Streaming-Anbieter ein bestehendes Abo. Nun habe ich für eine andere Sportart einen „Mobile Pass“ gebucht. Das Ergebnis: Mein bestehendes Abo funktionierte auf dem Fernseher nicht mehr, weil die Software fälschlicherweise davon ausging, dass ich dafür keine Berechtigung mehr hatte.
Kurz gesagt: Berechtigungen nur erlauben, nie verbieten. Dann ist die Prüfung einfach und die Rechte lassen sich beliebig kombinieren.
Problem
Was ist hier technisch das Problem?
Vermutlich eine „negative Autorisierung“, auch Deny-Regel genannt. Den genauen Code kenne ich natürlich nicht, aber das Verhalten spricht dafür: Zuerst wird geprüft, ob ich das Event überhaupt sehen darf, und das Event war tatsächlich aufrufbar. Beim Laden des eigentlichen Streams folgt dann eine neue Autorisierungsabfrage, was nichts Ungewöhnliches ist.
Hier liegt vermutlich der Fehler: Es wird geprüft, ob ich einen „Mobile Pass“ besitze, und in diesem Fall wird der Stream auf dem TV verweigert. Statt zu fragen, ob ich etwas darf, wird gefragt, ob mir etwas verboten ist.
Warum ist das ein Problem?
Ein generisches Beispiel zeigt, warum sich so etwas schwer auflösen lässt:
Ein Benutzer ist in der Gruppe „Team 1“. Team 1 hat Zugriff auf die Buchhaltung. Jetzt wird ihm, zum Beispiel als Urlaubsvertretung, zusätzlich die Gruppe „Team 2“ zugewiesen. Team 2 hat keine Zugriffsberechtigung für die Buchhaltung, sie wird sogar aktiv verweigert.
Wie prüfe ich nun die Berechtigung dieses Nutzers? Hat er Zugriff, oder überwiegt die Verweigerung? Nun potenziere das mit der Zahl der Berechtigungen, Rollen und Gruppen. Jede Regel braucht eine Vorrangentscheidung, und das lässt sich kaum noch sauber implementieren.
Was ist die Lösung?
Die Lösung ist einfach und wurde mir dankenswerterweise von meinem damaligen Chef beigebracht: Allow-only, also eine rein additive Autorisierung.
Wann immer man es kontrollieren kann, sollte Autorisierung ausschließlich additiv erfolgen. Es gibt keine Verbote, nur Erlaubnisse. Dadurch wird die Überprüfung wesentlich einfacher, und man erspart sich komplizierte Autorisierungsprozesse.
Dafür schneidet man die einzelnen Berechtigungen so klein wie nötig. Dann lassen sie sich an alle Gruppen vergeben, die sie brauchen.
Hätte das das Problem mit dem Streaminganbieter gelöst?
Ja, und zwar sehr einfach. Bei einer rein additiven Autorisierung kann ich die Prüfung beenden, sobald ich eine passende Berechtigung gefunden habe, denn daran ändert sich nichts mehr.
- Sport 1 erfordert die Berechtigung „TV“ oder „Mobile“.
- Sport 2 erfordert die Berechtigung „Mobile“.
Mein bestehendes Abo liefert „TV“ und „Mobile“, der Mobile Pass liefert „Mobile“. Der neue Pass kann mir also nichts wegnehmen, und beide Prüfungen fallen korrekt aus.
Fazit
Verbote wirken auf den ersten Blick praktisch, aber sie machen jede Prüfung davon abhängig, welche anderen Regeln gerade greifen. Erlaubnisse dagegen lassen sich beliebig kombinieren, ohne dass sich etwas gegenseitig aufhebt.
Mein Rat: Berechtigungen klein schneiden, nur hinzufügen und die Prüfung beenden, sobald eine passende gefunden ist. Wer das von Anfang an so plant, spart sich später die Frage, welche Regel Vorrang hat. Und die Kunden müssen sich nicht wundern, warum ihr Abo nach einem Zukauf plötzlich nicht mehr funktioniert.
Hinweis: Die Grafiken in diesem Beitrag wurden mithilfe von KI erstellt.