[英]Kerberos Double Hop Delegation from IIS to SQL server (using django)
我需要将凭据(集成Windows身份验证)从IIS上的django网站传递到后端SQL服务器,以便它在适当的用户上下文中运行。
这是我的设置到目前为止的样子 :
domain\\svc_sqlserver
下的sql_sever.domain.com
上运行SQL Server app_server.domain.com
使用IIS在服务帐户domain\\svc_appserver
下运行Django网站,使用Windows身份验证和ASP.Net模拟(提供者设置为Negotiate:Kerberos -> Negotiate -> NTLM
),使用useAppPoolCredentials=True
Trusted_Connection=yes
,使用Windows身份验证从django连接到SQL Server 为domain\\svc_sqlserver
和domain\\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
信任svc_sqlserver
和svc_appserver
以便委托给MSSQLSvc
服务,另外对于domain\\svc_appserver
我也添加了HTTP
服务(来自上面的列表)
结果 :
WWW-Authenticate
响应头和Authorization
请求头(正确使用Negotiate
)确认 domain\\svc_appserver
时,应在运行domain\\remote_user
我已经在这方面工作了一个多星期但是对于我的生活,我无法弄清楚如何将经过身份验证的用户的上下文从IIS传递到SQL Server。 我浏览了数百个在线发现的链接,我不知道此时该怎么做。
还有什么我想念的吗? 在建立与数据库的连接之前,Django有没有办法设置用户的上下文? 如果有人可以提供帮助,我真的很感激。 谢谢!
我正在使用 :
我不认为在FastCGI或Kestrel工作进程中运行的任何东西都实现了模拟。 请参阅例如ASP.NET核心:
如果您使用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.