Weil Remote Desktop Web Access (RDWeb) ja nur mit IE wirklich so funktioniert wie Microsoft sich das vorstellt (weil ActiveX zum Zug kommen kann) und bei allen anderen Browsern in Wahrheit nur ein RDP File erzeugt/heruntergeladen/gestartet wird kann man dieses RDP File dann leider für immer benutzen. Zwar muss man sich am RDG und RDSH natürlich anmelden aber eine etwaig im Web Access eingebaute 2FA (siehe hier) geht damit flöten.
Man kann dann den Weg gehen und die Nutzung von RDP Files via ADFS Pre-Authentication grundsätzlich zu verhindern – nur ist das halt ein bisserl weltfremd im Jahre 2017 den IE zu erzwingen (vor allem wenn man auch iOS/Android/macOS bedienen will oder muss), daher habe ich folgenden “Workaround” ersonnen (und auch erfolgreich implementiert):
Am RDWeb Server ein Verzeichnis erstellen und für die relevanten Benutzer lesend freigeben.
AM RDWeb Server in die login.aspx Seiten nach der OTP Authentication (hier beschrieben) folgendes einbauen (ich habe den Pfad für das Timestampdirectory in einen Parameter in der web.config hinterlegt):
if(bOTPAuthenticated)
{
// NEU: RDP File Start Handling
StreamWriter oWriter=new StreamWriter(ConfigurationManager.AppSettings["OTPAuthenticatedPath"]+"\\"+strOTPUsername.ToUpper());
oWriter.WriteLine(DateTime.Now.AddHours(8).ToString(@"yyyy\/MM\/dd HH:mm:ss"));
oWriter.Close();
// NEU-Ende
if (String.IsNullOrEmpty(strReturnUrlPage))
Response.Redirect("default.aspx");
else
SafeRedirect(strReturnUrlPage);
}
Entweder über lokale Group Policy oder all Users Startup eine Prüfung der Datei (sofern vorhanden) gegen den aktuellen Timestamp und Logoff (oder Meldung + Logoff oder was auch immer), ich habe dafür KIXTART genommen:
$SharePath="\\mein.server.com\MeinTimestampshare$"
IF EXIST($SharePath+"\"+@USERID) = 0
? @USERID+" existiert auf "+$SharePath+" nicht, logoff wird initiiert"
LOGOFF 1
ELSE
? @USERID+" existiert auf "+$SharePath
IF OPEN(3, $SharePath+"\"+@USERID) = 0
$Date=READLINE(3)
IF @ERROR <> 0
? "Timestamp Datei kann nicht gelesen werden, logoff wird initiiert"
LOGOFF 1
ELSE
? "Ablauftimestamp aus Timestamp Datei: "+$Date
$Diff=TimeDiff($Date,"now","m")
? "Zeitunterschied in Minuten: "+$Diff
IF $Diff > 0
? "Ablauftimestamp liegt in der Vergangenheit, logoff wird initiiert"
LOGOFF 1
ELSE
? "Ablauftimestamp liegt in der Zukunft, logon ok"
ENDIF
ENDIF
$dummy=ClOSE(3)
ELSE
? "Timestamp Datei kann nicht geöffnet werden, logoff wird initiiert"
LOGOFF 1
ENDIF
ENDIF
Credits für TimeDiff: https://community.spiceworks.com/scripts/show/599-kixtart-function-timediff