Kerberos Double Hop Delegation von IIS zum SQL Server (mit Django)

Kerberos Double Hop Delegation von IIS zum SQL Server (mit Django)

Ich muss die Anmeldeinformationen (Integrierte Windows-Authentifizierung) von einer Django-Website auf IIS an einen Back-End-SQL-Server weitergeben, damit dieser im richtigen Benutzerkontext ausgeführt wird.

So sieht mein Setup bisher aus:

  1. Ausführen von SQL Server sql_sever.domain.comunter einem Dienstkontodomain\svc_sqlserver
  2. Ausführen einer Django-Website unter app_server.domain.comVerwendung von IIS unter einem Dienstkonto domain\svc_appservermit Windows-Authentifizierung und ASP.Net-Identitätswechsel (Provider ist auf eingestellt Negotiate:Kerberos -> Negotiate -> NTLM) mituseAppPoolCredentials=True
  3. Herstellen einer Verbindung zum SQL-Server von Django aus mithilfe der Windows-Authentifizierung durch Festlegen Trusted_Connection=yesder Verbindung
  4. Konfigurierte SPNs für die Kerberos-Authentifizierung für domain\svc_sqlserverund domain\svc_appserverwie folgt:

    setspn -a HTTP/app_server                          domain\svc_appserver
    setspn -a HTTP/app_server.domain.com               domain\svc_appserver
    setspn -a MSSQLSvc/sql_server.domain.com:PORT      domain\svc_sqlserver
    setspn -a MSSQLSvc/sql_server.domain.com:INSTANCE  domain\svc_sqlserver
    setspn -a MSSQLSvc/sql_server.domain.com           domain\svc_sqlserver
    
  5. Vertrauenswürdig sowohl svc_sqlserverfür svc_appserverdie Delegation an MSSQLSvcDienste als auch zusätzlich für die domain\svc_appservervon mir hinzugefügten HTTPDienste (aus der obigen Liste)

Ergebnis:

  1. Die Kerberos-Authentifizierung funktioniert auf SQL Server. Bestätigt durch einen Blick aufAuthentifizierungsschema der verbundenen Benutzer
  2. Kerberos-Authentifizierung funktioniert auf der Django-Website. Bestätigt durch Überprüfung WWW-Authenticatedes Antwortheaders und Authorizationdes Anforderungsheaders ( Negotiatewird korrekt verwendet)
  3. SQL Server läuft nur im Kontext, domain\svc_appserverwenn er laufen soll unterdomain\remote_user

Ich arbeite jetzt schon seit über einer Woche daran, aber ich kann einfach nicht herausfinden, wie ich den Kontext eines authentifizierten Benutzers von IIS an SQL Server übergebe. Ich habe Hunderte von Links durchgesehen, die ich online gefunden habe, und bin mir an diesem Punkt nicht sicher, was ich tun soll.

Gibt es sonst noch etwas, das ich übersehen habe? Gibt es in Django eine Möglichkeit, den Kontext des Benutzers festzulegen, bevor eine Verbindung zur Datenbank hergestellt wird? Wenn mir jemand helfen kann, wäre ich sehr dankbar. Danke!

Ich benutze:

verwandte Informationen