从 IIS 到 SQL 服务器的 Kerberos 双跳委托(使用 django)

从 IIS 到 SQL 服务器的 Kerberos 双跳委托(使用 django)

我需要将凭据(集成 Windows 身份验证)从 IIS 上的 django 网站传递到后端 SQL 服务器,以便它在适当的用户上下文中运行。

到目前为止我的设置是这样的

  1. sql_sever.domain.com在服务帐户下运行 SQL Serverdomain\svc_sqlserver
  2. app_server.domain.com使用 IIS 在服务帐户下domain\svc_appserver使用 Windows 身份验证和 ASP.Net 模拟(提供程序设置为Negotiate:Kerberos -> Negotiate -> NTLM)运行 Django 网站useAppPoolCredentials=True
  3. Trusted_Connection=yes通过在连接中设置,使用 Windows 身份验证从 django 连接到 SQL 服务器
  4. 为 Kerberos 身份验证配置的 SPNdomain\svc_sqlserver如下domain\svc_appserver

    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. domain\svc_appserverSQL Server 仅在其应运行的上下文中运行domain\remote_user

我已经为此工作了一个多星期,但我还是搞不清楚如何将经过身份验证的用户上下文从 IIS 传递到 SQL Server。我浏览了在线找到的数百个链接,但我不知道现在该怎么做。

我还遗漏了什么吗?在 Django 中,有没有办法在建立与数据库的连接之前设置用户的上下文?如果有人能帮忙,我将不胜感激。谢谢!

我在用着

相关内容