Microsoft Learn

Mit der Webplattform Microsoft Learn bietet Microsoft viele verschiedene Module und Lernpfade (praktische Übungen), um sich mit den aktuellen Microsoft Technologien kostenlos weiterbilden zu können.

Das Einzige, was man dazu braucht, ist ein Microsoft Learn-Konto. Die Module sind versehen mit einem theoretischen und einem praktischen Teil, welcher dann mit der Hilfe einer Sandbox (Azure Shell mit allen benötigten Tools) durchgeführt werden kann.

Es gibt auch sogenannte “30 Days to Learn It-Herausforderungen”. Dabei werden mehrere Module zu einer Sammlung zusammen gefasst. Beispiel die “Cloud Skills Challenge – Azure Developer”. Sie besteht aus 35 Module, für die man laut Microsoft ca. 28 Std. und 16 Min. Zeit investieren muss. Beendet man die Herausforderung innerhalb dieser 30 Tage, erhält man eine 50% Gutschrift für ein “Microsoft Certification exam”.

Viel Spass beim Ausprobieren und Lernen! :o)

Nützliche Links

Microsoft Learn

30 Days to Learn It

Meine Badges & Trophäen

Authentisierung, Authentifizierung und Autorisierung

Was bedeuten Authentisierung, Authentifizierung und Autorisierung schon wieder?

Alle 3 Begriffe beschreiben einen unterschiedlichen Schritt bei der Überprüfung einer bestimmten Identität und dem Gewähren von Zugriffsrechten.

  1. Authentisierung – das aktive Nachweisen einer Identität
  2. Authentifizierung – die Prüfung des Nachweises auf seine Korrektheit
  3. Autorisierung – den Zugiff auf die erlaubten Ressourcen freigeben

Beispiel: Flugreise

  1. Person authentisiert sich mit ihrem Pass und Ticket am Flughafen
  2. Die Person wird anhand ihrer Dokumente am Schalter authentifiziert
  3. Durch das Ticket wird die Person autorisiert am Flug teilzunehmen

Beispiel: Anmeldung Webanwendung

  1. Person authentisiert sich mit der Eingabe ihres Benutzernamens und Passworts
  2. Server / Dienst überprüft Benutzername und Passwort Kombination und authentifiziert die Person
  3. Gleichzeitig erhält die Person ihre zugewiesenen Berechtigungen. Server / Dienst autorisiert die Person auf zugewiesene Module und Funktionen (Bsp: Benutzerverwaltung, Auflistung offener Rechnungen usw.)

Nützliche Links

Wikipedia: Authentifizierung

Wikipedia: Autorisierung

C# 9: Init only Properties / init only setters

Init only Properties sind unveränderbare Datenobjekte, die einmal initialisiert den Zustand nicht mehr ändern können. Dazu verwendet man das Schlüsselwort init anstelle von set.

// Auto property
public Guid MyId { get; init; }

// property
private Guid myId;
public Guid MyId{
  get {return myId;}
  init {myId = value;}
}

// lambda property
private Guid myId;
public Guid MyId{
  get  => myId;
  init => myId = value;
}

Wird nun die “MyId” einmal zugewiesen, kann diese nicht mehr versehentlich überschrieben werden. “MyId” kann nur bei der Objektinitialisierung oder über den Konstruktor festgelegt werden.

// object class with the secret 
public class MySecret
 {
  public MySecret()
  {
  }
  public MySecret(Guid myId)
  {
    MyId = myId;
  }
  public Guid MyId { get; init; }
}

// Example 1
// create an object with the secret
// assign with object initializer
MySecret mySecret = new MySecret()
{
  MyId = Guid.NewGuid()
};


// Example 2
// create an object with the secret
// assign in the instance constructor
MySecret mySecret2 = new MySecret(Guid.NewGuid());

Nützliche Links

docs.microsoft.com: init only setters

Azure: Sammelsurium

Begrifflichkeiten

Azure RBACRollenbasierte Zugriffssteuerung von Azure
Im Azure-Portal -> Zugriffssteuerung (IAM)

1. Sicherheitsprinzipal (wer: Benutzer, Gruppe oder Anwendung)
2. Rollendefinition (was: Sammlung von Berechtigung – Besitzer, Mitwirkender, Leser oder Benutzerzugriffsadministrator)
3. Bereich (wo: Verwaltungsgruppe, Abonnement, Ressourcengruppe oder Ressource)
Durable FunctionsEine Erweiterung der Azure Functions.
Mithilfe von Durable Functions können komplexe zustandsbehaftete Funktionen in einer serverlosen Umgebung implementiert werden. (Workflows)

– Ereignisgesteuerten Code
– Funktionen miteinander verketten
– Funktionen orchestrieren und koordinieren und die Reihenfolge bestimmen
– Synchron als auch asynchron
WebhookBenutzerdefinierte HTTP-Rückrufe
Azure FunctionsCode ausführen, ohne eine Infrastruktur explizit bereitstellen oder verwalten zu müssen.

– Function as a Service (FaaS) oder einen Microservice
– Ereigsnisgesteuert (Trigger)
Azure Queue StorageAzure-Dienst, der cloudbasierte Warteschlangen implementiert. Anwendungskomponenten greifen mithilfe einer REST-API oder einer von Azure bereitgestellten Clientbibliothek auf eine Warteschlange zu. Eine Nachricht in der Warteschlange ist ein Bytearray von bis zu 64KB.

NuGet-Paket Azure.Storage.Queues

1) await queue.CreateIfNotExistsAsync();
2) await queue.AddMessageAsync(message);
3) CloudQueueMessage message = await queue.GetMessageAsync();
await queue.DeleteMessageAsync(message);
Azure-SpeicherkontenEnthält alle Azure Storage-Datenobjekte: Blobs, Dateien, Warteschlangen, Tabellen und Datenträger. Das Speicherkonto stellt einen eindeutigen Namespace für Ihre Azure Storage-Daten bereit, auf den von jedem Ort der Welt aus über HTTP oder HTTPS zugegriffen werden kann.
SpeicherkontoschlüsselSind Schlüssel welche in Azure-Speicherkonten verwendet werden. (Primär & Sekundär)

Speicherkonto > Einstellungen > Zugriffsschlüssel
Shared Access Signature (SAS)Eine SAS ist eine Zeichenfolge, die ein Sicherheitstoken enthält, das einem URI angefügt werden kann. Zweck, bei nicht vertrauenswürdige Clients. Die SAS definiert die Berechtigungen und den Zugriffszeitraum des Clients.
Azure Key VaultIst ein Clouddienst zum sicheren Speichern und Zugreifen von API-Schlüssel, Kennwörter, Zertifikate oder kryptografische Schlüssel.
BlobsSkalierbarer Objektspeicher für Text- und Binärdaten. (Blockblobs, Seitenblobs, Anfügeblobs)
Table StorageNoSQL-Speicher für die schemalose Speicherung von strukturierten Daten
Azure-Speicherkonten REST-API-EndpunkteBlobs
https://[name].blob.core.windows.net/
Warteschlangen
https://[name].queue.core.windows.net/
Tabelle
https://[name].table.core.windows.net/
Dateien
https://[name].file.core.windows.net/
Azure-RessourceEine Azure-Ressource ist ein verwaltbares Element in Azure
Visual Studio-WorkloadsEine Workload ist ein vorkonfiguriertes Bündel von Tools innerhalb von Visual Studio, das zusammengefasst wurde, um Entwicklern zu ermöglichen, bestimmte Arten von Anwendungen zu erstellen, bestimmte Entwicklungssprachen zu verwenden oder für bestimmte Plattformen zu entwickeln.
Azure App ServiceDienst für das Hosten von Webanwendungen, REST-APIs und Back-End-Diensten.
Azure App Service-PlanDefiniert die Computeressourcen, welche die App in Anspruch nehmen wird, wo sich diese Ressourcen befinden, wie viele zusätzliche Ressourcen der Plan in Anspruch nehmen kann und welcher Tarif verwendet wird.
Azure Security Center (ASC)Ist ein Überwachungsdienst, der Schutz vor Bedrohungen für Ihre gesamten Dienste ermöglicht.
DatagrammePakete von Daten, die von einer Komponente an eine andere gesendet werden. (Nachrichten und Ereignisse)
Azure Service BusNachrichten auf drei verschiedene Arten austauschen: über Warteschlangen, Themen und Relays

Abbildung mit einer Beispielwarteschlange für Nachrichten, bei der ein Absender die Nachrichten an die Warteschlange sendet und ein Empfänger diese einzeln aus der Warteschlange abruft.
Bild mit einem Absender, der über ein Thema mit drei Abonnements Nachrichten an mehrere Empfänger sendet. Diese Abonnements werden von drei Empfängern genutzt, um die relevanten Nachrichten abzurufen.

Ist die Kommunikation ein Ereignis? Falls ja, Event Grid oder Event Hubs verwenden.

Soll eine einzelne Nachricht an mehrere Ziele übermittelt werden? Falls ja, verwenden Sie ein Service Bus-Thema. Falls nicht, verwenden Sie eine Warteschlange.
MEAN-StapelAkronym aus seinen Komponenten: MongoDB, Express.js, AngularJS und Node.js

MongoDB zum Speichern von Informationen
Express zum Weiterleiten aller HTTP-Anforderungen an den entsprechenden Handler
AngularJS zum Verknüpfen der Benutzeroberfläche mit der Geschäftslogik des Programms
Node.js zum Hosten der serverseitigen App
Azure Event HubsIst ein cloudbasierter Dienst zur Ereignisverarbeitung, der pro Sekunde Millionen von Ereignissen empfangen und verarbeiten kann.

Nützliche Links:

Azure für .NET-Entwickler

.NET Architecture Guides

Azure: Attach debugger to App Service funktioniert nicht (Visual Studio 2019 V. 16.09.3)

Beim Versuch eine .NET 5 Webapplikation zu debuggen (Cloud Explorer -> App Service -> Attach Debugger) wurde mir immer folgende Meldung angezeigt:

Die Verbindung mit dem Remoteendpunkt wurde beendet.

Folgendes wurde überprüft:

  • Remotedebuggen ist aktiviert (App Service <Name> -> Konfiguration -> Allgemeine Einstellungen -> Debuggen)
  • Published wurde die “Debug” Konfiguration
  • Korrektes Target Framework eingestellt
  • App Service ist erreichbar

Ursache

Nach einer Weile recherchieren im Netz habe ich folgende Erkenntnis erlangt:

Visual Studio schickt eine Initialisierungsmeldung an den Remote Debugger. Im Inhalt sind unteranderem installierte Komponenten des VS. Es scheint, dass bei manchen VS Installationen diese Meldung die erwartete Grösse überschreitet, was dann zu einem sofortigen Abbruch führt. Gemäss Microsoft wurde dies bereits behoben im “App Service image Version 93” jedoch noch nicht weltweit verteilt. Was nun aber fortlaufen passieren soll. (24.02.2021)

Mit Hilfe von Kudu kann dies bei der Webapplikation überprüft werden. Cloud Explorer -> App Service <Name> -> Open in Kudu

Test halber habe ich einen neuen App Service-Plan mit Standort USA erstellt. Eine Testapplikation published und das Debuggen gestartet. Und es hat funktioniert. Der Azure App Service war in der Version:

Was ist nun die Lösung?

  1. Warten auf auf die “App Service image Version 93”
  2. Auf einen anderen Standort ausweichen, wenn möglich
  3. Als letzte Möglichkeit -> Als Workaround kann auch die Visual Studio Installation angepasst werden und nicht verwendete Komponenten deinstalliert werden (Habe ich selber nicht verifiziert)

Update (06.04.2021)

Das “App Service Image Version 93” ist jetzt auch an meinem verwendeten Standort angekommen und das Debuggen funktioniert wieder.

Nützliche Links

https://developercommunity.visualstudio.com/t/attach-debugger-to-azure-app-service-not-working/933126

.NET 6 Multi-platform App UI (MAUI)

Mit .NET 6 wird MAUI (Multi-platform App UI) xamarin.forms revolutionieren und die Entwicklung von “Cross-platform” Applikationen noch flexibler, produktiver und somit noch wirtschaftlicher ermöglichen.

Egal in welchem Umfeld werden bereits heute verschiedenste Plattformen (iOS, Android, Windows, Mac) eingesetzt, was zunehmend die Entwicklung von Applikationen erschwert. In vielen Betrieben wird auch das Thema BYOD (Bring Your Own Device) gefördert und sorgt dafür, dass die Plattform Vielfalt noch herausfordernder wird.

Das sind die Vorteile von .NET MAUI:

  • Free & open source
  • Cross-platform, native UI
  • Single project system, single codebase
  • Deploy to multiple devices, mobile & desktop
    • Native User Interfaces
    • Native API Access
    • Native Performance

Was heisst native UI?

Native UI heisst, egal welche Plattform ich als Benutzer verwende, ich erhalte immer die erwartete Oberfläche / Elemente (Datumspicker, Buttons, Navigation, Dark-Light Mode usw.) meiner verwendeten Plattform.

Video: The Future of Native Apps Development in .NET 6

Nützliche Links

Discord: DotNetEvolution

Xamarin

github: .NET MAUI

.NET 6.0 Preview Download

Windows: Remotecomputer herunterfahren oder neustarten

Dazu muss die “Command Console” / Eingabeaufforderung mit einem auf dem Remotecomputer berechtigten Benutzer ausgeführt werden.

Mit dem “Shutdown-Befehl” kann dann der Remotecomputer neu gestartet oder heruntergefahren werden:

>shutdown /r /m \\<remotecomputer> /t 0
/rneustarten
/mIP oder Name des Remotecomputer
/tZeit bis zum Neustart (0 = sofort ohne Verzögerung)

Nützliche Links

Windows: shutdown command

How to Restart or Shutdown a Remote Computer (activedirectorypro.com)

Raspberry Pi als VPN-Server mit WireGuard

Möchte man unterwegs auf seine privaten Daten im Heimnetzwerk zugreifen oder aber über eine verschlüsselte Verbindung im Internet recherchieren, weil man über einen öffentliches W-LAN verbunden ist, braucht man einen VPN-Server. Mit Hilfe eines VPN-Client wird dann eine sichere und verschlüsselte Verbindung in das eigene Heimnetzwerk hergestellt, egal wo man sich auf der Welt befindet.

Oft hat man die Möglichkeit, einen VPN-Server direkt auf dem eigenen Router zu aktivieren. Bietet der eigene Router, welcher durch den Provider zur Verfügung gestellt wird, keine Möglichkeit, einen VPN-Server zu betreiben, kann man mit einem Raspberry Pi und PiVPN ein einfacher, schneller und sicherer VPN-Server im Heimnetzwerk einrichten.

Welche Hardware braucht es dazu?

  • Einen Raspberry Pi 3 B+ oder 4
    • SD-Karte min. 8 GB
    • Netzteil
    • Gehäuse
  • Netzwerkkabel

Ist noch kein Raspberry Pi zu Hause vorhanden, findet man viele Anbieter, welche den Raspberry Pi in einem Bundle anbieten. Das heisst, alle benötigen Komponenten, werden mitgeliefert. Einfach eine Suche nach Raspberry Pi Bundle durchführen.

Welche Software braucht es dazu?

  • Raspberry Pi OS Lite
  • PiVPN mit WireGuard
  • WireGuard für Desktop oder Mobile

Installation

Die Installation führen wir mit folgenden Schritten durch:

  1. Raspberry Pi OS Lite installieren auf der SD-Karte (mit Raspberry Pi Imager)
  2. SSH aktivieren und Raspberry Pi starten
  3. Pi OS aktualisieren
  4. PiVPN installieren und WireGuard konfigurieren
  5. WireGuard Client-Konfiguration erstellen
  6. Portforwarding auf Router einrichten
  7. VPN-Client installieren und testen

Nützliche Links:

WireGuard Webseite

PiVPN Webseite

WinSCP

Raspberry Pi Webseite

Raspberry Pi Imager

Raspberry Pi – mit PiVPN WireGuard Clients verwalten

Neuer Client erstellen

Die Client-Konfiguration wird verwendet, um mit einem WireGuard-Client eine VPN-Verbindung herzustellen. Um einen neuen Client zu erstellen, wird folgender Befehl verwendet:

> pivpn add

Client löschen / entfernen

Wird ein Client gelöscht, ist es nicht mehr möglich, sich mit dem VPN-Client zu verbinden.

> pivpn remove

Alle Clients aufliesten

Auflistung aller vorhandenen Clients-Konfigurationen.

> pivpn list

Alle Clients mit Verbindungsstatus anzeigen

Auflistung aller aktiven Clients.

> pivpn clients

QR-Code einer Client-Konfiguration erstellen

Durch das erstellen des QR-Codes kann auf einfache Weise die Client-Konfiguration auf ein Mobilephone übertragen werden. Voraussetzung ist die installierte WireGuard App.

> pivpn -qr

Nützliche Links

WireGuard

Raspberry Pi als VPN-Server mit WireGuard

Raspberry Pi – PiVPN installieren und WireGuard konfigurieren

Mit dem Installations-Skript PiVPN können wir auf einfache Weise einen VPN-Server installieren und konfigurieren. Dazu wird folgender Befehl in der Raspberry Pi Konsole eingegeben:

Damit wird das Skript heruntergeladen und ausgeführt:

Wir klicken uns durch das Set-up-Menu und geben die benötigten Informationen an. Ist man sich unsicher, welche Auswahl getroffen werden soll, kann man ohne Probleme die Standardeinstellungen verwenden. Braucht man spezielle Einstellungen, wird man diese meistens kennen.

Als VPN wird WireGuard ausgewählt und mit “ok” bestätigt. Das Installaltions-Skript führt nun die benötigten Schritte aus und installiert die nötigten Komponenten.

Nun gibt es die Möglichkeit, den Standardport zu ändern oder dieser zu belassen.

Als Nächstes definieren wir den gewünschten DNS-Provider. Brauchen wir keine speziellen Einstellungen, kann das Quad9 DNS-Netzwerk genutzt werden.

Haben wir eine öffentliche fixe IP-Adresse, können wir “Use this public IP” auswählen. Ist keine vorhanden, müssen wir dies über eine Dynamische DNS Konfiguration lösen. Hilfe zur Konfiguration finden wir über eine Suchmaschine.

Als Nächstes können wir das automatische Installieren von Updates aktivieren. Damit dies auch korrekt funktioniert, muss jedoch der Raspberry Pi zwischendurch neu gestartet werden.

Nach diesem Schritt werden nun noch die “Server-Keys” generiert. Konnten die Server-Schlüssel generiert werden, ist es an der Zeit, den Raspberry Pi neu zu starten. Danach ist die Installation fertiggestellt.

Nützliche Links

Raspberry Pi als VPN-Server mit WireGuard

Raspberry Pi OS Lite installieren mit dem Raspberry Pi Imager

Raspberry Pi – SSH aktivieren

Raspberry Pi – Betriebsystem updaten / aktualisieren