簡體   English   中英

從IIS到SQL服務器的Kerberos雙躍點委派(使用django)

[英]Kerberos Double Hop Delegation from IIS to SQL server (using django)

我需要將憑據(集成Windows身份驗證)從IIS上的django網站傳遞到后端SQL服務器,以便它在適當的用戶上下文中運行。

這是我的設置到目前為止的樣子

  1. 在服務帳戶domain\\svc_sqlserver下的sql_sever.domain.com上運行SQL Server
  2. app_server.domain.com使用IIS在服務帳戶domain\\svc_appserver下運行Django網站,使用Windows身份驗證和ASP.Net模擬(提供者設置為Negotiate:Kerberos -> Negotiate -> NTLM ),使用useAppPoolCredentials=True
  3. 通過在連接中設置Trusted_Connection=yes ,使用Windows身份驗證從django連接到SQL Server
  4. domain\\svc_sqlserverdomain\\svc_appserver配置了用於Kerberos身份驗證的SPN,如下所示:

     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. 信任svc_sqlserversvc_appserver以便委托給MSSQLSvc服務,另外對於domain\\svc_appserver我也添加了HTTP服務(來自上面的列表)

結果

  1. Kerberos身份驗證適用於SQL Server。 通過查看連接用戶的身份驗證方案來確認
  2. Kerberos身份驗證適用於Django網站。 通過檢查WWW-Authenticate響應頭和Authorization請求頭(正確使用Negotiate )確認
  3. 僅限SQL Server下的上下文中運行domain\\svc_appserver時,應在運行domain\\remote_user

我已經在這方面工作了一個多星期但是對於我的生活,我無法弄清楚如何將經過身份驗證的用戶的上下文從IIS傳遞到SQL Server。 我瀏覽了數百個在線發現的鏈接,我不知道此時該怎么做。

還有什么我想念的嗎? 在建立與數據庫的連接之前,Django有沒有辦法設置用戶的上下文? 如果有人可以提供幫助,我真的很感激。 謝謝!

我正在使用

我不認為在FastCGI或Kestrel工作進程中運行的任何東西都實現了模擬。 請參閱例如ASP.NET核心:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.1&tabs=aspnetcore2x#impersonation

如果您使用HTTP Basic身份驗證,這需要用戶分叉密碼,您可以使用Win32執行登錄並自行進行模擬。 但對於NTLM和Kerberos,沒有簡單的方法可以在python進程中模擬調用用戶。

或者,如果這是一個自定義應用程序,您可以使用SQL模擬 ,或將最終用戶的標識傳遞給SESSION_CONTEXT ,服務器端代碼可以在SESSION_CONTEXT中看到它。 也有可能增強django-pyodbc-azure來做到這一點。

我能想到的另一件事是通過實現一個模仿用戶並管理在最終用戶身份下運行的 python 進程ASP.NET HttpHandler推送自己的Django主機。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM