Home Automation: Bewegungs und Lichtsensor Marke Eigenbau

Das Licht in bestimmten weniger frequentierten Zimmer mittels Bewegungsmelder zu steuern war schon länger ein Ziel von mir. Bei meinem letzten Ikea Besuch habe ich einen Tradfri Bewegungsmelder meinem Einkauf hinzugefügt. Dieser Batteriebetriebene Sensor lässt sich dank dem Zigbee Standart mit allen Möglichen Koordinatoren verwenden. In meinem Setup verfüge ich über einen Philips Hue, Ikea Tradfri und einen direkt über Homeassistant betriebenen ZHA Koordinator. Weil der Tradfri Gateway seit einem Homeassistant Release nicht mehr zuverlässig funktioniert habe ich den Tradfri Bewegunssensor über die ZHA Integration eingebunden. Nach ungefähr einem Monat im Kleiderzimmer war die Batterie leer und musste gewechselt werden. Zudem störte mich, dass ich keine Möglichkeit hatte die Automatisierung der Lichter mit der Lichtintensität im Zimmer zu koppeln. Also entschied ich mich selber einen Sensor, basierend auf einem Passive Infrared (PIR) und einer Fotowiderstand (LDR), zu bauen.

«Home Automation: Bewegungs und Lichtsensor Marke Eigenbau» weiterlesen

SAML/OIDC Claims debuggen mit Cat

Als Identity und Accessmanagement Engineer habe ich schon die eine oder andere Federated Authentication eingerichtet. Dabei gibt es einige mögliche Ursachen, weshalb die Authentifizierung in der Applikation nicht klappt. Eine häufige davon ist, dass die Assertion falsche, fehlende oder nicht richtig formattierte Claims enthält. Um dies zu debuggen gibt es verschiedene Möglichkeiten wie zum Beispiel ClaimsXRay von Microsoft, OpenID Connect debugger von Nate Barbettini oder die Browser Erweiterung SAML-tracer. Da ich ohnehin etwas tiefer in die Materie von SAML/OIDC/OAuth2 einsteigen wollte habe ich mich dazu entschlossen selber einen Microservice zum Visualisieren von Claims zu erstellen. Als Programmiersprache entschied ich mich für Go, weil ich mein Wissen darin ebenfalls vertiefen möchte und sie für mich schon fast der de facto Standart für Web Services, insbesondere Microservices geworden ist.

In einer ersten Version habe ich auf existierende Module für SAML und OIDC von anderen Entwicklern zurückgegriffen. Dadurch konnte ich mich vor allem auf den Flow und das Session Handling konzentrieren, welche integrale Bestandteile der Authentifizierung sind. Bei diesem Projekt handelt es sich um eine überschaubare Grösse und darum entschied ich mich das Ganze mit Golang HTML Templates und ohne JavaScript Framework für das Frontend umzusetzten.

Die folgende Grafik visualisiert die beiden Flows.

Der Cat – cloud authentication tester ist übrigens das Projekt, über das ich im Artikel CI/CD Pipeline mit Gitea und Drone berichtet habe.

«SAML/OIDC Claims debuggen mit Cat» weiterlesen

ADFS und iFrames

Leider gibt es immer mal wieder Applikationen, welche sich nicht an Best Practices im Webdesign orientieren und es unter Umständen nötig machen ein anderes System anzupassen so das sie funktionieren. Kürzlich hatte ich so einen Fall, bei dem ein SAP System welches die Authentisierung via ADFS (mit dem SAML Protkoll) durchführt, die Login Seite von ADFS als iFrame eingebettet hat. In diesem Beitrag zeige ich eine Möglichkeit, wie das einbetten nur für gewisse URLs zugelassen werden kann.

«ADFS und iFrames» weiterlesen

CI/CD Pipeline mit Gitea und Drone

Als Alternative zu Github und Github Actions gibt es für kleinere Teams/Projekte/Organisationen oder private Projekte viele Möglichkeiten, welche selber gehostet werden können. Ich habe die Kombination von Gitea (als Git Service) mit Drone (als CI/CD Service) getestet, insbesondere weil beide einen relativ kleinen Footprint bezüglich CPU und Memory haben. Sie lassen sich gut auf einem kleinen VPS (Virtual Private Server) oder sogar einem Raspberry Pi betreiben.

«CI/CD Pipeline mit Gitea und Drone» weiterlesen

ADFS Rollen als Claim durch Gruppen Mitgliedschaft

Ich habe schon verschiedene SaaS Applikationen gesehen, welche es erlauben Rechte in der Applikation anhand eines Claims aus dem SAML Token zu vergeben. Die Implementierung ist von Applikation zu Applikation unterschiedlich, weshalb ich mich in diesem Beitrag möglichst Allgemein halten werde.

Ein mögliches Anwedungsgebiet dafür wäre ein Role Based Access Control (RBAC) in einer Applikation. Dabei wird die Rollenzuweisung vom Service Provider an den Identity Provider delegiert. Der Identity Provider schreibt anhand seiner Claim Regeln eine oder mehrere Rollen in einen entsprechenden Claim Typ.

«ADFS Rollen als Claim durch Gruppen Mitgliedschaft» weiterlesen

AD User Query and Selecting

Für einen regelmässigen Export aus dem Active Directory habe ich mich entschlossen das bestehende VBScript durch ein, von Grund auf neu geschriebenes, Powershell Script zu ersetzten. Active Directory Abfragen, welche früher in VBScript mit AdoDB und dem ADSI Interface gemacht wurden können mit Powershell bequem über die entsprechenden Cmdlets realisiert werden. Dabei gibt es ein paar Unterschiede zwischen dem ADSI Interface und dem Active Directory Web Services, welches von den Powershell Cmdlets genutzt wird, zu berücksichtigen. Ein Beispiel ist der Security Identifier (SID) welcher von ADSI Binär und von AD Web Services als String Repräsentation geliefert wird. Genau dieser wurde in oben erwähntem Export explizit in Binär Form gewünscht, wofür ich eine Konvertierung in das Powershell Script einbauen musste. Falls noch weitere solche Anforderungen auftauchen habe ich ein wieder verwendbares Snippet erstellt was mir ermöglicht auf allen Attributen der Abfrage Modifikationen durchzuführen. Das sieht folgendermassen aus

[object[]]$Attributes = 
"sAMAccountName",
"givenName",
"sn",
"Title",
"Department",
"Company",
@{L="objectSid";E={
  $buf = [Byte[]]::new($_.objectSid.BinaryLength)
  $_.objectSid.GetBinaryForm($buf,0)
  ([System.BitConverter]::ToString($buf)).Replace("-","")
}}

$Properties = ($Attributes | ForEach-Object { @($_, $_.L)[$_.L -ne $null] })
Get-ADUser -LdapFilter "(cn=pri)" -Properties $Properties | Select-Object $Attributes | Format-Table -AutoSize

In Zeile 1-12 wird ein Array aus Objekten erstellt, welches entweder nur den Attribut Namen als String enthält, wenn keine Modifikationen durchgeführt werden sollen oder eine Hashtable mit den Keys L (Label) und E (Expression) welche als Input für das Cmdlet Select-Object verwendet werden kann. Zeile 14 bildet ein String Array welches als Parameter für das -Properties Attribut der RSAT-AD Cmdlets verwendet werden kann.

Das Resultat sieht folgendermassen (hier als Tabelle formatiert) aus.

Web Application Proxy Event 12019

Ich habe bei einer Migration des Web Application Proxy von Windows Server 2012 R2 auf einen Windows Server 2019 das Problem gehabt, dass der Service mitsamt Health Check lief aber die Verbindung über den Proxy nicht klappte. Also habe ich das Zertifikat überprüft, sowie einen neuen Eintrag von Hand erstellt, bei dem die Verbindung funktioniert hat. Im Eventlog war lediglich der Event 12019 ersichtlich, der den Hinweis enthält, dass der Listener bereits von einer anderen Komponente auf dem Web Application Proxy registriert wurde. Dies kann mit folgendem Befehl überprüft werden
netsh http show urlacl

Troubleshooting Web Application Proxy | Microsoft Docs

Bei mir war das nicht der Fall, eine Suche im Internet brachte mich auf folgenden Link, welcher den entscheidenden Hinweis auf ein Slash ( / ) im Namen lieferte.
Web Application Proxy Event ID 12019 – (0x8007007b) | GI Architects (gi-architects.co.uk)

Darauf hin habe ich ein Powershell Snippet geschrieben, mit dem alle Namen der Anbindungen welche ein Slash enthalten zu einem Bindestrich konvertiert werden. Noch den Service neu gestartet und die Verbindungen über den WAP klappten wunderbar.

Get-WebApplicationProxyApplication | select ID,Name | ForEach-Object { if($_.Name.Contains("/")){ Set-WebApplicationProxyApplication -Name $_.Name.Replace("/","-").TrimEnd("-") -ID $_.ID} }

Home Automation: Temperatur und Feuchtesensor mit DHT22 und Wemos D1 Mini

Die Integration einer Home Automation verleitet dazu alle Möglichen Sensoren und Aktoren aus zu probieren und die unterschiedlichsten Daten zu sammeln. Mein erster Temperatur und Feuchtigkeits Sensor war ein DHT22 den ich in den Wifi Led Strip Selbstbau integriert hatte. Dieses Konstrukt ist heute noch in Betrieb, ich musste lediglich die Werte etwas korrigieren aufgrund der Abwärme des ESP8266.

Später habe ich einen Xiaomi Mijia Temperatur und Feuchtigkeits Sensor in Homeassistant eingebunden. Dieser hat jedoch den Nachteil, dass die Reichweite sehr beschränkt ist weil die Werte über Bluetooth Low Energy BLE abgefragt werden. Durch die Reichweiten Beschränkung ist es ebenfalls nicht möglich Sensoren in verschiedenen Zimmer zu deponieren.

«Home Automation: Temperatur und Feuchtesensor mit DHT22 und Wemos D1 Mini» weiterlesen