Software-Entwicklung

Application Upcycling mit Identity Providern

Viele Applikationen erreichen im Laufe der Zeit einen Punkt, an dem zu entscheiden ist, wie neue Funktionalitäten umzusetzen sind oder Anpassungen an aktuelle Rahmenbedingungen oder Technologien durchzuführen sind, um weiterhin Produktivität, Qualität und Sicherheit der Anwendungen zu gewährleisten. Sehr oft wird dabei nur daran gedacht, die Applikation völlig neu zu entwickeln oder ein Standardprodukt als Ersatz einzukaufen. Beide Varianten werden oft im Aufwand massiv unterschätzt. Die Alternative ist ein Upcycling durchzuführen, das einen smarten Weg bietet, bestehende Applikationen zu erweitern.

In diesem Beitrag möchte ich anhand von Beispielen aus der Praxis erläutern , wie ein Identity Provider kostengünstig und flexibel zur Verbesserung von Applikationen dient. Identity Provider verwalten die Berechtigungen und Zugangsschlüsseln der Benutzer und stellen damit eine Grundlage für Cloud-basierende Services dar. Sie vereinfachen nicht nur die Authentifizierung wesentlich, sondern können auch mehrere Applikationen über ein single-sign-on integrieren. Identity Provider sind somit ein wesentlicher Baustein für moderne Apps und Webapplikationen.

Titelbild_Application Upcycling mit Identy Providern

Die Praxisbeispiele

Das erste Praxisbeispiel bezieht sich auf einen Webauftritt einer Firma. Dieser soll einerseits auf den neuesten Stand bezüglich Sicherheit gebracht werden und andererseits externe Systeme einbinden können. Den Benutzern soll eine einfache Möglichkeit zum übergreifend funktionierenden  Login ermöglicht werden. Früher erforderten solche Anforderungen hohen Aufwand in allen beteiligten Systemen und zumeist wurden die Sessioninformationen in einer gemeinsam genutzten Datenbank gehalten. Dies schränkt die Anwendbarkeit massiv ein, da alle Systeme (auch Drittsysteme) auf eine gemeinsame Datenbank zugreifen müssen.

Im zweiten Beispiel soll eine App entwickelt werden, die es den Kunden ermöglicht, über Facebook-Accounts oder den firmeneigenen Accounts die App zu nutzen. Die herkömmliche Variante ist die Programmierung des Zugriffs auf Facebook und die Nutzung der bisher schon eingesetzten proprietären Benutzerverwaltung. Für jeden Facebook-Benutzer könnte ein zusätzlicher Account in der eigenen Benutzerverwaltung notwendig sein. Sollen zukünftig auch Google-Accounts genutzt werden, muss dies ebenfalls in der App programmiert werden. Dann soll auch die Webseite auf die neue Authentifizierung umgestellt werden. Dies entwickelt sich bald zu einem hochkomplexen System.

Mit Identity Providern können diese beiden Szenarien wesentlich einfacher und zukunftssicherer gelöst werden, ohne hohe Entwicklungsaufwände. Außerdem ist es besser, im Bereich Security keine Eigenentwicklungen durchzuführen, sondern auf Standardlösungen zu setzen.

Ich werde Ihnen anhand eines konkreten Beispiels ein Anwendungsszenario skizzieren und die Integration mit einem Identiy Provider erläutern. Zum gemeinsamen Verständnis vorab einige Begriffsklärungen.

 

Begriffe

Eine Person kann mehrere digitale Identitäten besitzen. Beispiele dafür sind die Benutzerinformationen für Online-Banking, der Account eines sozialen Netzwerkes oder die Zugriffsberechtigungen für einen Onlineshop.

Authentifizierung ist vereinfacht gesagt die Verifizierung einer Identitätsbehauptung. Als Beispiele für Methoden der Authentifizierung sollen hier der Nachweis des Wissens um ein Passwort und die Nutzung eines Tokens genannt werden.

Autorisierung ist die Zuteilung von Zugriffsrechten im Anschluss einer Authentifizierung. Die Abgrenzung der beiden Begriffe wird mit folgendem Beispiel deutlich: ein Benutzer wird korrekt authentifiziert, ist jedoch für keinerlei Datenzugriffe autorisiert.

Claims sind Aussagen über eine Identität und werden in Token zur Verfügung gestellt. Dies können zum Beispiel Vor- und Nachname oder eine Gruppenzugehörigkeit sein. Token enthalten eine Signatur, um deren Echtheit feststellen zu können. Dies ist insofern wichtig, da der Aussteller der Token (der Identity Provider) nicht im gleichen lokalen Netzwerk wie die Anwendung installiert sein muss. Inzwischen gibt es mehrere Cloud-basierte Lösungen für Identity Provider.

OAuth ist ein Protokoll, das die Autorisierung regelt, jedoch nicht den konkreten Datenaustausch zwischen den beteiligten Systemen. Es gibt dabei zwei Haupt-Varianten, wobei oft nur die einfachere angewandt wird. Dabei wird das Access-Token direkt ausgestellt, anstatt als Zwischenschritt ein zusätzliches Autorisierungs-Token zu erstellen.

OpenId ist eine notwendige Ergänzung zu OAuth, da es neben dem Protokoll auch Implementierungsdetails definiert.

JSON Web Token (JWT) ist ein Format für Token, das moderner und kompakter als der XML-basierende Standard SAML ist.

Die Kombination von OAuth mit OpenId und JWT stellt die Grundlage für ein modernes Identity Management dar.

 

Anwendungsszenario Apps

Ein typisches Beispiel für die Anwendung von Identity Providern, sind Apps, die den Nutzern verschiedene Authentifizierungsmöglichkeiten über die Konten der sozialen Netzwerke bieten. Manchmal wird dabei auch auf die Möglichkeit verzichtet, eigene User anzulegen. Es wird stattdessen einfach Google+, Microsoft Live oder Facebook genutzt.

Abb. 1 Anwendungsszenario Apps

Bei der Authentifizierung ruft die App zunächst den Identity Provider auf (1) und lässt sich ein Token (2) ausstellen. Mit diesem Token erfolgt die Autorisierungsanfrage am Applikationsserver (3). Im folgenden Schritt (4) kann nochmals beim Identity Provider nachgefragt werden, ob das Token valide ist. Dieser letzte Schritt kann auch vereinfacht werden, wenn lediglich die Signatur des Tokens mit kryptographischen Methoden geprüft wird, statt beim Identity Provider anzufragen.

Mittels der beschriebenen Mechanismen kann auch ein Single-Sign-on (SSO) realisiert werden, weil die Identitätsinformation und die Authentifizierung an eine dritte Stelle delegiert wurde. Die einzelnen Applikationsserver müssen nur mehr die Token prüfen.

Modernisierung von Applikationen

Falls  eine bestehende Applikation mit Benutzerdaten vorhanden ist, empfiehlt sich meist die Modernisierung des bestehenden Authentifizierungssystems. Oftmals werden aber noch veraltete Konzepte eingesetzt, die nicht mehr aktuellen Sicherheitsregeln entsprechen. Passwörter wurden (und werden) im Klartext oder mit einfachen Hashmethoden bearbeitet und in einer Datenbank abgelegt. Eine einmalige Anwendung einer Hashfunktion ist nicht mehr ausreichend, wenn unbefugte Zugriff auf die Passwörter in der Datenbank erlangen!

Das Fachwort für die Ableitung eines eindeutigen Schlüssels aus einem benutzerdefinierten Passwort ist „Password Based Key Derivation“. Bekannte Algorithmen sind zum Beispiel PBKDF2 oder bcrypt. Es wird nicht nur einmal ein SHA-Hashwert gebildet, sondern mehrere zehntausend Male, um die Zeit zum Rückrechnen auf das Klartextpasswort des Benutzers zu verlängern. Andernfalls sind die Passwörter der Benutzer in Gefahr!

Eine Möglichkeit, Benutzerpasswörter besser zu verschlüsseln, ist unten dargestellt. Beim nächsten Login des Benutzers wird zuerst die alte unsichere Funktion verwendet, um das Passwort zu prüfen, dann wird der alte Hash ersetzt.

Abb. 2 Anwendungsszenario Apps

Dafür muss allerdings der Identity Provider angepasst werden. Mit Standardprodukten wie im vorigen Szenario ist dies normalerweise nicht möglich. Hier beginnt die Stärke von Open Source wie die Identity Server von WSO2 und Thinktecture.

Abb. 3 Anwendungsszenario Apps

Auch eine Kombination von einem cloudbasierten Identity Provider und einem eigenen internen Identity Provider ist möglich. Hier kann der Benutzer entscheiden, über welchen Provider er sich anmelden will, also zum Beispiel ob der Google-Account genutzt werden soll, oder der applikationsspezifische Account.

 

Zusammenfassung

Identity Management ist wichtig für die Akzeptanz von modernen Applikationen. Viele Apps nutzen bereits ausschließlich die Identity Provider von Google und Facebook um ihren Benutzern einen autorisierten Zugriff zu geben. Durch diese Möglichkeit wird viel Aufwand gespart, der für die sicherheitstechnisch ordnungsgemäße Verwaltung der Benutzerdaten notwendig ist.

Oft gibt es allerdings schon einen großen Kundenstock mit Benutzerdaten in der eigenen Datenbank.  Diese Accounts sollen die Kunden dann möglichst unverändert weiterhin verwenden können. Hier bietet sich ein Identity Provider auf Basis von OpenSource-Produkten an, die eine große Flexibilität hinsichtlich der Anpassbarkeit an firmenspezifische Bedürfnisse an.

Mehr zu Application Upcycling können Sie auch im Rückblick zum 23. ANECON Expertenfrühstück nachlesen.

 

Links

Key Derivation Functions
https://en.wikipedia.org/wiki/PBKDF2
https://en.wikipedia.org/wiki/Bcrypt

OpenID
http://openid.net/

Beispiele für Identity Provider
http://wso2.com/products/identity-server/
https://www.microsoft.com/en-us/server-cloud/products/azure-active-directory/overview.aspx
https://github.com/IdentityServer/IdentityServer3

Passende Artikel

Kommentare gesperrt.