Donnerstag, 3. Februar 2022

SSO mit Azure App Proxy und lokalem Apache

 Im Beitrag ActiveDirectory SSO mit Apache habe ich erklärt, wie ein Apache per Kerberos Benutzer authentifizieren kann.

Benutzt man den Azure Anwendungsproxy, um die On-Premises Anwendung in der Cloud bereitzustellen, so sind ein paar zusätzliche Handgriffe notwendig um auch nicht-IIS Server per SSO verfügbar zu machen.

Dazu ist es zunächst hilfreich, den SSO Fluss zu verstehen:

  1. Der Anwendungsproxy terminiert auf dem lokalen Connector (Dienst auf einem beliebigen Server der Domäne, ich nenne ihn mal "Endpunkt-Server")
  2. Mittels Service Principal Name (SPN) wird nun ermittelt, welches Kerberos Ticket ausgestellt werden muss und wie der Zugriff delegiert wird
    setspn -Q HTTP/webserver.domain.com
  3. Im Falle eines IIS würde der "Endpunkt-Server" im AD eine Delegierung auf den SPN erhalten. Allerdings ist der Apache Server kein Domänen-Mitglied und daher nicht in der Liste der Delegierung verfügbar. Vielmehr wurde ein Proxy-Benutzer erstellt, dessen Keytab für den Apache verwendet wird.
    Daher handelt es sich um eine sogenannte "Delegated Identity". Dieser muss man noch mitteilen, dass sich der "Endpunkt-Server" ihrer bedienen darf:
    $connector = Get-ADComputer -Identity endpunkt-server -server <dc>
    Set-ADUser -Identity idp -PrincipalsAllowedToDelegateToAccount $connector
    Get-ADUser idp -Properties PrincipalsAllowedToDelegateToAccount
    

Auf dem "Endpunkt-Server" muss außerdem noch ein Registry Schlüssel hinzugefügt werden um das Kerberos Token im SPNEGO Format zu übergeben:

REG ADD "HKLM\SOFTWARE\Microsoft\Microsoft AAD App Proxy Connector" /v UseSpnegoAuthentication /t REG_DWORD /d 1
net stop WAPCSvc & net start WAPCSvc

Nun kann in der Azure Anwendung das SSO konfiguriert werden:

Der SPN wurde oben unter 2. bereits erwähnt.

 

Die "Delegierte Identität für Anmeldung" ist davon abhängig, welchen Benutzername die Webanwendung erfordert (in der Variable HTTP_REQEST[REMOTE_USER]).

  • "Benutzername ist Teil des Benutzerprinzipalnamens" liefert bei mir den Namen vor dem Domain-Part ("joe")
  • "Name des lokalen SAM Kontos" liefert mir den vollständigen Namen inkl. Kerberos Domäne ("joe@DOMAIN:COM")

Keine Kommentare:

Kommentar veröffentlichen