ASP.NET Identity: gut, aber (noch) nicht gut genug

Das ASP.NET-Membership-System wurde 2005 in ASP-NET 2.0 eingeführt. Mit ASP.NET Membership übernahm ASP.NET die Grundauthentifizierungs- und Autorisierungslogik. Trotz positiver Punkte erwartet unser Kursleiter Alejandro Amrein eigentlich mehr.

Autor Alejandro Amrein
Datum 24.06.2014
Lesezeit 4 Minuten

2005 wurde das ASP.NET-Membership-System in ASP-NET 2.0 eingeführt. Mit ASP.NET Membership übernahm ASP.NET die Grundauthentifizierungs- und Autorisierungslogik für uns. Ich bin der Meinung: gut, aber noch nicht gut genug.

ASP.NET Membership wurde für Forms-Authentication und SQL Server entworfen. Mit der Zeit waren diese Beschränkungen nicht mehr ausreichend und ASP.NET Membership machte den Übergang auf eine offenere Infrastruktur nicht möglich. ASP.NET Membership hat folgende Beschränkungen:

  • Fixes Datenbankschema
  • Custom Providers sind schwer zu implementieren
  • Nicht kompatibel mit OWIN

Mit WebMatrix wurde in Visual Studio 2008 ASP.NET SimpleMembership eingeführt. Simple Membership erlaubt eine gewisse Flexibilität, jedoch blieben einige Beschränkungen bestehen:

  • Nicht einfach implementierbar für nicht relationelle Datenbanken
  • Immer noch nicht kompatibel mit OWIN
  • Nicht erweiterbar

Mit Visual Studio 2013 präsentierte Microsoft ASP.NET Identity:

  • Eine einzige Plattform für MVC, Web Forms, Web API, Web Pages und SignalR
  • Implementierbar in Phone-, Store- oder Hybrid-Applikationen
  • Einfach erweiterbar
  • Verschiedene Persistenzmöglichkeiten:
    • EF Code First (standardmässig)
    • Schema-Flexibel
    • SharePoint, Azure Tables, NoSQL und andere
  • Unit-Test-bar
  • Claims-fähig
  • Social-integrierbar
  • Azure-AD-kompatibel
  • OWIN-integrierbar
  • NuGet-installierbar

Nicht gut genug

Eine Menge neuer Fähigkeiten! Warum behaupte ich also, ASP.NET Identity sei nicht gut genug? Man kann es auch anders formulieren: Warum sollten wir mehr erwarten? Ich stelle mir zwei Fragen.

1. Warum verwenden wir ein eingebautes Identity Management Framework?

Weil wir unsere Ressourcen auf die Applikationslogik beschränken möchten und die schwierige Sicherheitsfunktionalität den Sicherheitsexperten überlassen.

2. Welche «schwierige Sicherheitsfunktionalität» ist gemeint?

Damit meine ich eine Reihe von Punkten, die ein modernes Sicherheits-Framework für uns übernehmen sollte:

  • Benutzer und Passwörter verwalten und speichern: Persistenz und Verwaltung von Benutzer und deren Passwörter
  • Profile verwalten und speichern: Persistenz und Verwaltung von Benutzerprofil-Informationen
  • Rollen verwalten und speichern: Persistenz und Verwaltung von Rollen und Benutzerangehörigkeiten
  • E-Mail- Kontoüberprüfung: Sicherstellung der Angehörigkeit eines E-Mail-Kontos
  • Kennwort zurückzusetzen: Was passiert, wenn ein Benutzer sein Passwort vergisst?
  • Benutzername-Erinnerung: Was passiert, wenn ein Benutzer seinen Benutzernamen vergisst?
  • Kontosperrung: Was geschieht, wenn ein Administrator ein Konto sperren muss?
  • Prävention von Passwortraten: Wie erkennen (bzw. vermeiden) wir Versuche, ein Konto durch Wiederholungen zu raten?
  • Konto schliessen/löschen: Wie lassen wir einen Benutzer sein Konto schliessen oder löschen?
  • Moderne Passwortspeicherung (OWASP): Wie können wir Passwörter sicher speichern?
  • Handy-Prüfung: Sicherstellung der Angehörigkeit einer Handy-Nummer
  • Zwei-Faktor-Authentifizierung: Um die Sicherheit zu verbessern, wollen wir dem Benutzer zusätzliche Mittel geben, um seine Identität beweisen zu können
  • Zertifikatsbasierte Authentifizierung: Benutzer-Authentifizierung mit Zertifikaten
  • Auditing: Wie können wir die Veränderungen der Benutzerkonto-Informationen kontrollieren?
  • Tracing: Wie können wir Ausfälle im Identitätsmanagement und dem Authentifizierungssystem verfolgen?

ASP.NET Identity unterstützt nur die ersten drei Punkte! Auf die restlichen Punkte wird in ASP.NET nicht eingegangen. Ich hoffe, dass sich ASP.NET Identity mit der Zeit weiterentwickelt Richtung «richtiges» Authentication-Framework und wir uns dadurch auf unsere Arbeit konzentrieren können: die Applikationslogik.

Fazit

Die neuen Persistenz-Möglichkeiten, die Erweiterbarkeit und die OWIN-Integration sind ein grosser Fortschritt gegenüber vorherigen Versionen dieser ersten ASP.NET Identity. Geben wir Microsoft eine Chance und warten wir auf den nächsten Release.


Über den Autor

Alejandro Amrein

Alejandro Amrein, geboren in Argentinien, doktorierte 1986 an der ETH Zürich in numerischer Mathematik. Seit mehr als 15 Jahre arbeitet er als unabhängiger Entwickler, Berater und Trainer in Software Development mit Schwergewicht auf Microsoft Entwicklungstechnologien. Als Microsoft Certified Professional Developer (MCPD) und Microsoft Certified Trainer (MCT) unterrichtet er für Digicomp Academy AG verschiedene Kurse (C/C++, ASP.NET, C#, VB.NET, SharePoint, jQuery, WPF, u.a.).