ASP.NET Authentifizierung

12 Dezember 2016
Jelena Barth

Die Authentifizierung ist ein Teil der Anwendung-Sicherheit und ist ein sehr umfassendes Thema. Hier sind kurz die wesentlichen Authentifizierungsstrategien beschrieben ohne in die Tiefe zu gehen.

Authentifizierung ist der Prozess bei dem die angegebenen Benutzer-Anmeldeinformationen gegenüber der Authentifizierungsstelle validiert werden. Bei der Authentifizierung geht es darum "wer" die Anwendung benutzen darf, bei der Autorisierung - "was" darf der Anwendungsbenutzer machen.

Für jeden ASP.NET Entwickler stellt sich die Frage der Benutzer Authentifizierung und der dafür richtigen Konfiguration der Web Anwendung und des IIS Web-Server.

Als erstes, müssen wir uns für eine der möglichen Authentifizierungsstrategien entscheiden. Das hängt von der verwendeten Technologien und Sicherheitsanforderungen und beim Anlegen des Projekts auch den Umstand wieviel der Entwickler selbst in die Hand nehmen will und ob die Funktionalität aus dem „blackbox“ ausreichend ist, ab.

Beim Erstellen eines Web-Projekts bietet ASP.NET bereits implementierte Authentifizierungsmethoden für die Web Forms, MVC und Web API Projekttemplates. Man kann zwischen “Keine Authentifizierung”, “ Individuelle Benutzer-Accounts” (ASP.NET Identität, früher bekannt als ASP.NET Mitgliedschaft/Membership),  “ Organisationskonten” (Windows Server Active Directory oder Azure Active Directory) und “ Windows-Authentifizierung” (Intranet) wählen.

Wenn Sie “Individuelle Benutzer-Accounts” auswählen, dann verwendet Ihre neue Anwendung für die Benutzer-authentifizierung und Verwaltung die ASP.NET Identität. Der Weg ist zeitsparend, aber nur wenn Sie keine große Änderung an der ASP.NET Identität vornehmen.

Der Authentifizierungsprozess fängt beim Web Server an. Bei den ASP.NET Anwendungen ist es ein Zusammenspiel zwischen IIS Sicheheitsdiensten, .NET Framework und dem Betriebssystem. In IIS stehen Ihnen diverse Authentifizierungsmethoden zur Verfügung: Anonyme Authentifizierung, Formularauthentifizierung, Digestauthentifizierung, integrierte Windows-Authentifizierung, ASP.NET-Identitätswechsel.

Standartmäßig ist bei IIS die Anonyme Authentifizierung aktiviert. Das bedeutet, dass keine Authentifizierung für die Web-Anwendung stattfindet. Sie können die Anonyme Authentifizierung aktivieren, falls keine Authentifizierung seitens IIS benötigen und/oder Sie sich komplett auf Ihr eigenes Authentifizierungs-Mechanismus verlassen. Die Zugriffe erfolgen unter IUSR (Anonymous User Identity), der bei der IIS Installation automatisch angelegt wird. Daher, Achtung bei den Zugriffen auf das Dateisystem – hier müssen die Rechte für IUSR entsprechend gesetzt werden.

Für die Intranet-Anwendungen sind entweder integrierte Windows- oder Digest-Authentifizierung geeignet. In beiden Fällen muss der Benutzer über ein Active Directory (AD) / Windows Konto verfügen. Der Unterschied zwischen beiden Authentifizierungsmethoden ist, dass bei der Digest-Authentifizierung die Anmeldeinformationen vom Benutzer angegeben werden müssen. Diese werden verschlüsselt bevor sie über das Netzwerk übertragen werden. Diese Strategie schütz zwar vor dem Diebstahl des Passworts im Klartext, ist aber für die Man-in-the-Middle Angriffe anfällig, da es keine Möglichkeit gibt die Identität des Servers zu überprüfen.

Wogegen bei der integrierten Windows-Auhtentifizierung keine Anmeldeinformationen übertragen werden. Es werden Login und Passwort benutzt, mit denen der Benutzer sich vorher am PC angemeldet hat. Das macht diese Strategie sicherer und auch bequemer für den Benutzer. IIS authentifiziert den angemeldeten Client, erzeugt ein Sicherheitstoken und übergibt ihn an ASP.NET. In dem aktuellen HttpContext wird die Eigenschaft User zu einem IPrincipal Objekt gesetzt das von IIS bereitgestellt wird. Der Client-Browser und IIS kümmern sich um die Verwaltung der Authentifizierung von nun an, daher ist es wichtig die richtigen Einstellungen in der Anwendung und Browser vorzunehmen. Die integrierte Windows-Authentifizierung nutzt Negotiate / Kerberos oder NTLM Protokolle, um Benutzer anhand eines verschlüsselten Tickets zu authentifizieren, die zwischen einem Browser und einem Server übertragen werden.

Für die Internetanwendungen ist am besten die Formularauthentifizierung geeignet. Hier sollen die Benutzer sich immer durch Angeben vom Login und Password in einem HTML-Formular anmelden. Die Formularauthentifizierung ist Cookie-basiert und erlaubt eigene Login UI und eigenes Mechanismus um Benutzer-Anmeldeinformationen zu verifizieren. Wenn eine Client-Anfrage kommt, leitet der IIS diese Anfrage an die ASP.NET Anwendung weiter. Hier wird der nicht authentifizierte Benutzer auf Login-Seite umgeleitet, auf der er seine Anmelde-Informationen angibt. In der Anwendung in der Wb.config kann man für die Formularauthentifizierung die notwendigen Konfigurationsoptionen angeben, sowie Name von Cookie, Lebensdauer, Default-Seite u vieles mehr, z.B.

   <system.web>
      <authentication mode="Forms">
        <forms loginUrl="logon.aspx" name=".ASPXFORMSAUTH" defaultUrl="default.aspx" timeout="30" >
        </forms>
      </authentication>
      <authorization>
        <deny users="?" />
      </authorization>
  </system.web>

Achtung: es ist wichtig die richtige Einstellung bei dem IIS vorzunehmen. Wenn mehrere Authentifizierungs-Dienste aktiviert sind, dann gewinnt der "stärkste". Wenn Anonyme-Authentifizierung aktiviert ist, dann ist es dieser Dienst der benutzt wird.

Übrigens, die Konfigurationsdatei für IIS Express heißt applicationhost.config und befindet sich in My Documents > IIS Express > config. Ab Visual Studio 2015 wird diese in einem verstecktem Ordner .vs in der Solution abgelegt: $(solutionDir)\.vs\config\applicationhost.config.