PSWA ist ein relativ mächtiges Werkzeug, da liegt es auf der Hand den Zugang dazu mit 2FA zu sichern – hier am Beispiel MultiOTP, eine Open Source Geschichte.

Voraussetzung: MultiOTP ist lokal am PSWA Server eingerichtet (was im Normalfall nur Copy/Paste der Windows Version – mit entsprechender .ini Datei – bedeutet).
Vorsicht: PSWA Application Pool Account muss Schreibrechte auf das MultiOTP Verzeichnis haben wenn Logging enabled ist!

Umsetzung: PSWA mißbraucht Forms based Authentication ein wenig, daher muss man ein wenig kreativ eingreifen (PSWA spielt sich in C:\Windows\Web\PowerShellWebAccess\wwwroot ab): FBA Login Url ist Default.aspx welche aber leer ist und nur dazu dient auf die richtige Sprache umzuleiten (en-US in unserem Fall) – dort wird dann je nachdem ob eine Session da ist console.aspx oder logon.aspx (mit User/PW/Zielgerät etc. aufgerufen).

Wir kopieren daher im en-US Verzeichnis das Original logon.aspx auf logonMS.aspx und erzeugen ein neues logon.aspx. Die logon.aspx ist durch die lokale web.config für alle Benutzer freigegeben, unsere logonMS.aspx nicht – daher kann man unsere neue logon.aspx nicht umgehen weil durch die FBA Mechanik sofort auf Default.aspx und damit auf logon.aspx umgeleitet wird. Unsere neue logon.aspx leitet bei erfolgreicher OTP Authentifizerung auf logonMS.aspx weiter (konfigurierbar, s.u.).

Den Code für die Seite (OTPAuth.dll, Source: OTPAuth-Source) laden wir im übergeordneten \bin ab.

Die neue logon.aspx Seite kann über vier Parameter gesteuert werden die in die web.config direkt in …\wwwroot im Abschnitt appSettings einzufügen sind:

<add key="MultiOTPPathAndName" value="C:\\Pfad\\zu\\multiotp\\multiotp.exe" />
<add key="OTPUsernameRegex" value="^[a-zA-Z0-9]*$"/>
<add key="OTPRegex" value="^[0-9]{6}$"/>
<add key="TargetPageOnSuccessfullAuthentication" value="logonMS.aspx"/>

Und das wars schon.

Ablauf:
1) User surft Seite an, egal wo. FBA leitet auf Default.aspx weiter.
2) Default.aspx leitet auf logon.aspx im Sprachverzeichnis weiter (unsere OTP Seite).
3) Bei erfolgreicher OTP Authentifizerung leitet unser logon.aspx gemäß Konfiguration auf logonMS.aspx weiter.
4) PSWA wie ohne OTP.

Wie üblich der Warnhinweis: Das alles ist natürlich weit jenseits jeglichen Supports und MS Support wird (zurecht) das Weite suchen wenn er/sie/es sowas sieht und ein Problem daraus entstanden ist….zusätzlich sollte man die geänderten Dateien auch sichern, obwohl die Seiten seit 2012 praktisch unverändert geblieben sind weiß man nie was der nächste CU so bringt 😀