Kevin Gerndt Selbstständig

Wer Services wie etwa Facebook, Google oder Twitter in seine Applikationen integrieren möchte, kommt ohnehin nicht mehr an OAuth vorbei.

Web-APIs als zentrale Ressourcenzugriffspunkte erfreuen sich aufgrund ihrer positiven Eigenschaften zunehmender Beliebtheit. Das gilt sowohl für öffentliche Schnittstellen als auch für im Enterprise-Umfeld genutzte APIs. Doch mit zunehmender Verbreitung spielt auch das Thema Sicherheit eine immer größere Rolle. Der Artikel zeigt, welche Vor- bzw. Nachteile unterschiedliche Authentifizierungsverfahren bieten und wie sich ASP.NET Web APIs mittels eines eigenen Identitätsanbieters unter der Verwendung von OAuth und JWT gegen unbefugte Zugriffe absichern lassen.

Eigentlich ist das Thema Authentifizierung so alt wie das HTTP-Protokoll selbst. Doch die damit verbundenen Herausforderungen haben sich bis heute nicht geändert. Der Hauptgrund hierfür liegt in der statuslosen Natur des HTTP-Protokolls. Im Klartext bedeutet das: Meldet sich ein Benutzer mit seinen Zugangsdaten an einem Webserver an, so kann diese Anfrage authentifiziert werden. Der nächste Aufruf wäre jedoch wieder anonym, da eben keine permanente Verbindung zwischen Sever und Client besteht. Es sei denn, es kommt zu einer erneuten Übermittlung der Benutzerinformationen.

Basic Authentication

Um sich diesem Problem zu stellen, erfand man die Basic Authentication – den einfachsten Weg, sich gegenüber einer Webapplikation zu authentifizieren. Dieses Verfahren basiert auf einem Challenge-Response-Modell und verwendet Standard-HTTP-Header zur Flusssteuerung. Vereinfacht dargestellt, fragt ein Client eine Website an, die eine Authentifizierung erfordert. Die Website liefert dann den HTTP-Statuscode 401 zurück sowie weitere Headerinformationen für die benötigten Authentifizierungsverfahren.

HTTP/1.1 401 Access Denied
WWW-Authenticate: Basic realm=”localhost”
Content-Length: 0

Erhält der Browser die Antwort vom Webserver, öffnet sich in der Regel eine Eingabemaske, in die der Benutzername und das Passwort einzutragen sind. Benutzername und Passwort, getrennt durch einen Doppelpunkt, werden dann als Base64-enkodierter String mittels des HTTP-Authorization-Headers an den Webserver übermittelt. Damit der Server weiß, um welchen Authentifizierungstyp es sich handelt, wird dem enkodierten String Basic vorangestellt. Verläuft die Authentifizierung erfolgreich, werden die angeforderten Inhalte an den Client ausgeliefert.

GET /index.html HTTP/1.1 
Host: localhost
Authorization: Basic S2V2aW46V2llc2JhZGVu

Der Vorteil dieses Verfahrens liegt vor allem darin, dass weder Cookies noch Sessions benötigt werden. Des Weiteren bedarf es auch keiner speziellen Log-in-Seite, da der Browser die Maske zur Eingabe der Authentifizierungsinformationen bereitstellt. Diesen Vorteilen steht jedoch eine Reihe von Nachteilen gegenüber. Das Hauptproblem ist die permanente Übertragung von Benutzername und Passwort im Klartext. Da diese Übertragung bei jedem Seiten- bzw. Serviceaufruf erfolgt, bieten sich für Angreifer hervorragende Chancen, an diese sensiblen Daten zu gelangen (z. B. durch eine Man-in-ihe-Middle-Attacke). Eine sichere HTTPS-Verbindung bei der Verwendung von Basic Authentication ist also unabdingbar. Um zu verhindern, dass der Benutzer seine Anmeldeinformationen bei jedem Aufruf eingeben muss, speichert der Browser diese Informationen zwischen. Eigentlich ein nettes Komfortfeature. Je nach Browser hat sich diese Funktion jedoch schon das ein oder andere Mal als Fallstrick erwiesen. Ändert der Benutzer beispielsweise sein Passwort auf der Webseite, bekommt der Browser nichts davon mit und übermittelt beim Aufruf falsche Credentials. Auch der Server hat keine Möglichkeit, den Benutzer abzumelden. Das führt dann dazu, dass die Website nicht mehr ausgeliefert wird und der Benutzer die Fehlermeldung „Zugriff verweigert“ erhält.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Windows Developer 8.17 - "Auf Nummer sicher"

Alle Infos zum Heft
579804760Safely Secure – Eine Abwägung verschiedener Authentifizierungsverfahren
X
- Gib Deinen Standort ein -
- or -