© Blue Flourishes/shutterstock.com
Amazon Web Services als Entwicklungsbeschleuniger

Effiziente Entwicklung mit AWS


Moderne Applikationen sind der Treibstoff eines erfolgreichen Geschäftsmodells. Softwareentwickler und -architekten, die Produzenten des Treibstoffs, sind begehrter und rarer denn je. Wie kann es Unternehmen gelingen, mit den wenigen verfügbaren Ressourcen den Anforderungen an Geschwindigkeit und Agilität gerecht zu werden? Eine Antwort da-rauf liefern die Cloud-nativen Services und Tools der hyperskalierenden Amazon Web Services (AWS).

Software bildet mittlerweile die Basis eines jeden erfolgreichen Unternehmens – vom Digitalkonzern bis zum Autobauer. Umso wichtiger ist es, an junge talentierte IT-Experten heranzukommen, die bei der Entwicklung neuer digitaler Produkte helfen. Doch deren Beschaffung ist oft schwerer als die Beschaffung frischen Kapitals an den Finanzmärkten. Das Risiko, aufgrund mangelnder Digitalisierung nicht mehr wettbewerbsfähig zu sein, ist gleichauf um ein Vielfaches höher. Doch selbst Unternehmen mit scheinbar ausreichend großen Entwicklungsabteilungen schaffen es oft nicht, den selbst gesteckten Zielen oder den Anforderungen des Marktes gerecht zu werden. Die Hauptursachen hierfür sind häufig:

  • veraltete Organisationsstrukturen (z. B. Plan-Build-Run)

  • mangelnde Standardisierung

  • fehlerhafter Einsatz von Tools und mangelnde Automatisierung

  • mangelnder Wissensstand der Mitarbeiter

Jedoch kommt es gerade bei der Entwicklung neuer digitaler Produkte vor allem auf eins an: „Speed“. Der richtige Einsatz von Cloud-Technologie und Cloud-nativen Services kann sich dabei als wahrer Beschleuniger in der Entwicklung von Software entpuppen. In diesem Artikel werden wir einige AWS-Services näher kennenlernen und erfahren, wie deren Einsatz dazu beitragen kann, die Effizienz in der Entwicklung zu steigern.

Benutzermanagement und -authentifizierung mit Amazon Cognito

Einen Knackpunkt jeder Softwareentwicklung stellt die Authentifizierung dar, ganz egal ob mobile App oder Webanwendung. Zwar gibt es Authentifizierungsstandards, auf die wohl jeder Entwickler zurückgreifen würde, jedoch gehen die Herausforderungen weit darüber hinaus: Wo sollen Benutzername und Passwort gespeichert werden? In einer eigenen Datenbank? Falls ja, welche Technologie zur Verschlüsselung von Passwörtern und sensiblen Benutzerinformationen sollte eingesetzt werden? Oder doch lieber auf Standardidentitätsanbieter wie Google, Microsoft oder Facebook zurückgreifen? Wie sieht es mit Skalierbarkeit und granularen Berechtigungsstrukturen aus? Die aufkommenden Fragen ließen sich seitenweise fortführen. Die Antwort von AWS [1] lautet: Amazon Cognito. Hierbei handelt es sich um einen von AWS angebotenen Cloud-Service, der eine einfache Registrierung und Anmeldung sowie Zugriffskontrollmechanismen bereitstellt. Die Benutzerkonten werden in sogenannten Benutzerpools organisiert. Ein Benutzerpool lässt sich entweder innerhalb weniger Minuten über die AWS-Konsolenoberfläche anlegen oder mittels Terraform provisionieren. In einem Benutzerpool können laut aktuellen AWS-Limitationen bis zu 40 Millionen Benutzer verwaltet werden. Neben der Anmeldung über das eigene Directory ist auch eine Authentifizierung mit Hilfe externer Identitätsanbieter wie Microsoft, Facebook oder Twitter möglich. Benutzerpools bieten integrierte Registrierungs- und Anmeldeservices sowie eine anpassbare Weboberfläche zur Anmeldung von Benutzern. Ein weiterer Vorteil ist die einfache Konfiguration einer Multi-Faktor-Authentifizierung, die unrechtmäßige Anmeldungen erschwert.

Cognito sieht ein Standardschema für einen Benutzerdatensatz vor, der Attribute wie E-Mail, Vorname, Nachname, Geschlecht etc. umfasst. Sollen weitere Informationen zu einem Benutzer erfasst werden, lässt sich das über Custom Attributes vom Typ String oder Number abbilden. Zur einfachen Identifikation von Custom Attributes empfiehlt sich die Einhaltung einer Präfix-Notation, wie etwa Präfix:CustomAttribute. Für die Authentifizierung gegen AWS Cognito kann das Amplify SDK verwendet werden. Es ist ein Set von Tools und Services, das einen stark vereinfachten programmatischen Zugriff auf AWS-Dienste bietet, und steht für verschiedene Entwicklungstechnologien wie JavaScript oder .NET Core zur Verfügung. In Listing 1 ist der erforderliche Code für eine SDK-basierte Authentifizierung dargestellt.

Listing 1

Amplify.configure({ Auth: { identityPoolId: 'Identity Pool Id', region: 'eu-central1', } }); Auth.signIn(username, password) .then(user => console.log(user)) .catch(err => console.log(err));

Bei der Methdode Auth.signIn handelt es sich um nichts anderes als einen Wrapper für einen AJAX-Aufruf gegen den URL https://cognito-idp.eu-central-1.amazonaws.com. Wer sich die rund 300 Kilobyte für das SDK sparen möchte, hat somit auch die Möglichkeit, den Aufruf direkt auszuführen, wie Listing 2 zeigt.

Listing 2

var settings = { url: https://cognito-idp.eu-central-1.amazonaws.com, type: 'POST', data: JSON.stringify({ 'AuthFlow': 'USER_PASSWORD_AUTH', 'ClientId': 'Client Id', 'AuthParameters': { 'USERNAME': username, 'PASSWORD': password } }), contentType: 'application/x-amz-json-1.1', headers: { 'X-Amz-Target': 'AWSCognitoIdentityProviderService.InitiateAuth' } }; $.ajax(settings).done(function (xhr) { })

Im Erfolgsfall wird die Authentifizierungsanfrage mit ID-, Access- und Refresh-Tokens beantwortet. Die Payload des ID-Tokens ist in Abbildung 1 dargestellt. Sie umfasst neben den Standard-attributen auch die Custom Attributes, sofern sie einen Wert enthalten. Das ID-Token dient der Authentifizierung gegenüber AWS.

gerndt_aws_1.tif_fmt1.jpgAbb. 1: AWS-Cognito-Auth-Token

Das Access-Token enthält Angaben zum authentifizierten Benutzer sowie den zugewiesenen Gruppen. Der Zweck des Zugriffstokens besteht darin, API-Vorgänge im Kontext des Benutzers im Benutzerpool zu autorisieren. Das ermöglicht dem Benutzer beispielsweise das Ändern oder Löschen seiner Benutzerdaten. Mittels des Refresh-Tokens können neue ID- und Access-Tokens angefordert werden. Im Standard verfügt das Refresh-Token über eine Gültigkeit von 30 Tagen. Der Gültigkeitswert lässt sich jedoch pro App auf einen Zeitraum zwischen 60 Minuten und 10 Jahren einstellen. Bei Verwendung des Amplify SDKs erfolgt ein automatischer Refresh der ID- und Access-Tokens, wenn sie ihre Gültigkeit verloren haben. Im Fall einer direkten Authentifizierung gegen den Web-Service-Endpunkt muss dieser Ablauf eigens implementiert werden. Vor Übergabe des ID- oder Access-Tokens ist hierzu jeweils dessen Gültigkeit anhand des Expiration Attributes zu überprüfen. Ist der Gültigkeitszeitraum eines ID- oder Access-Tokens überschritten, lässt sich mit Hilfe des Refresh-Tokens unter Verwendung des Authentication-Flows REFRESH_TOKEN ein neuer Zugriffsschlüssel a...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang