繁体   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