Der zweite Tag war ähnlich spannend wie der erste. Die Keynote über die Veränderung der IT eröffnete die Konferenz. Hierbei ging es vor allem darum, wie zurzeit ein Strukturwandel hin zu Cloud und Web-Basierten Anwendungen stattfindet.

Anschließend konnten die verschiedenen Vorträge besucht werden. Mein erster Beitrag war von Dominick Baier. Er erzählte einiges über ASP.NET-Core- und MVC-Sicherheit. Welche neuen Funktion bereitstehen. Als größte Änderung ist hervorzuheben, dass eine Anfrage nun als Pipe verarbeitet wird. Dadurch lassen sich die Anfragen verketten und sowohl eingehend als auch ausgehend prüfen und manipulieren.

Die Unterstützung für IPrinciple ist nicht mehr gegeben. Zukünftig muss mittels ClaimsPrincipal und einer Pipe-Authentifizierung gearbeitet werden (ASP​.NET Core authorization introduction).

Über einen AuthenticationManager kann nun einfach eine Authentifikation hinzugefügt werden. Vor allem die Windows-Authentifizierung war vorher nur schwierig möglich.

Eine große Änderung besteht beim behandeln von „Authorize“-Seiten. Wird eine Seite mit diesem Attribut versehen und mit unzureichenden Rechten aufgerufen, so erscheint eine weiße Seite. Innerhalb eines Inspectors wurde der Statuscode 401 (unauthorized) zurückgeliefert. Eine Middleware (z.B. Cookie-Authentication) kann durch die Parameter LoginPath und AccessDeniedPath eine Umleitung einrichten.
Eine Umleitung zur Anmeldung kann beispielsweise auf /Account/Login zeigen. Der Parameter returnUrl wird automatisch gesetzt, um nach dem Login auf die angeforderte Seite zuzugreifen.
Zu beachten ist, dass eine returnUrl prinzipiell „böse“ sein kann, wenn diese nicht auf einen lokalen Pfad sondern eine fremde Webseite zeigt (Stichwort: Open redirection attack). Durch Url.IsLocalUrl(..) kann die redirectUrl überprüft werden. Ist es eine lokale Adresse, kann darauf verwiesen werden. Ist die URL nicht lokal, empfiehlt sich eine Umleitung auf die Startseite.

Anschließend besuchte ich den Beitrag „Automatisieren von Alltagsaufgaben: Tuning von Visual Studio“ von Tobias Meier. Hauptsächlich wurde Gulp vorgestellt. Mit dem TaskRunner von Visual Studio (bereits ab 2015) ist es möglich, automatisierte Scripts laufen zu lassen. Anhand einiger Beispiele wurden beispielsweise Sass-Dateien direkt bei Speicherung in CSS umgewandelt. Andererseits können verschiedene Bilder durch ein Build-script zu einem Sprite zusammengefasst werden, was die Anzahl der Dateien für Webseiten reduziert.

Bei einer Automatisierung wie hier mit Gulp, besteht ein Vorteil darin, dass verschiedene Teams mit verschiedenen IDEs arbeiten können. Ein Designer verwendet andere Programme als ein Backend-Entwickler. Durch Gulp (oder Automatisierung generell) können verschiedene Entwickler arbeiten und dabei ein einheitliches Ergebnis liefern.

Nach dem Mittagessen fand der Beitrag C# Script in Action von Robin Sedlaczek statt. Zu Beginn stellte sich die Frage: „Was sind Skriptsprachen?“. Darauf aufbauend wurde die interaktive C#-Konsole im Visual Studio kurz vorgestellt. In dieser Konsole lässt sich C#-Code direkt schreiben und ausführen. Sie kann auch im aktuellen Projekt genutzt werden, sodass auch eigene Klassen verwendet werden können.
Es gibt verschiedene Befehle für C#-Skript:

  • #load lädt ein Skript
  • #r referenziert eine externe DLL und bindet diese ein
  • #reset setzt die Umgebung auf den Ursprungszustand zurück

Bei der ersten Ausführung von C#-Skript innerhalb des Codes vergehen einige Sekunden. In diesem Zeitraum muss erst die Umgebung bereitgestellt werden. Roslyn bietet an dieser Stelle auch Syntaxunterstützung, sodass der Syntaxbaum, Schlüsselwörter etc. durchlaufen werden können. Herr Sedlaczek hat bei dieser Session zwei Probleme vorgestellt. Zum einen
kann der Code noch nicht korrekt durch den Garbage-Collector aufgeräumt werden. In einer Demo wurde Code in einer Schleife ausgeführt und jedes Mal ein neues Script-Objekt erzeugt. Das alte konnte jedoch nicht entfernt werden.
Zum anderen fehlt eine Sicherheitsbeschränkung für Skripte. Es wäre theoretisch möglich durch System.IO auf den Windows-Ordner zuzugreifen und notwendige Daten zu löschen.

In der darauf folgenden Veranstaltung stellten Sarah Paruszewski und Julia Stoff ihr aktuelles Projekt vor. In ihrem aktuellen Projekt gibt es viele Entwickler und Designer, welche koordiniert werden müssen. Unter Berücksichtigung der Agilen Entwicklung sollten Teams relativ klein sein, sodass der Kommunikationsaufwand gering gehalten werden kann.

Gemeinsam stellten die beiden Damen ihre eingesetzten Werkzeuge und Konzepte vor. Darunter waren u.a. Pair-Programming, Design-Donnerstag (zum Absprechen von Oberflächen und Design-Themen) und vor allem die Retroperspektive. Diese wurde bei fast jedem Konzept erwähnt. Bei der Retroperspektive wurden Probleme offen angesprochen und gemeinsam eine Lösung gefunden. Hier wurde aktiv aus dem aktuellen Vorgehen und den Problemen gelernt, sodass bestimme Punkte reibungsloser funktionieren.
In dem Vortrag wurde vor allem darauf hingewiesen, die Zeiten einzuhalten. Beispielsweise hat der Termin für die Retroperspektive zwei Stunden angesetzt. Gibt es Themen, welche in dieser Zeit nicht angesprochen wurden, dann ist das so. Diese Grenzen mussten anfangs erst gelernt werden, haben aber anschließend bei der Fokussierung geholfen.

Den Abschluss des heutigen Tages machte Rainer Stropek mit Containern in .NET-Entwicklungsalltag. Diese Session hatte einen sehr großen Praxisteil. Wir brauchen Jekyll zum Parsen von Markdown-Daten und Erstellen einer statischen HTML-Seite? Kein Problem. Auf DockerHub finden wir alle möglichen Pakete, welche wir nutzen können. Durch ein Volume-Mapping kann der Container direkt auf die Daten zugreifen.

Abschluss fand diese Session mit einem selbst erstellten Dockerfile und kleinen Tipps. Beispielsweise sollten keine Daten innerhalb eines Docker-Containers gespeichert werden. Hierzu gibt es Docker-Volumes und Cloud-Services.