gpt4 book ai didi

sql-server - 从 IIS 到 SQL 服务器的 Kerberos 双跳委派(使用 django)

转载 作者:行者123 更新时间:2023-12-03 16:40:30 25 4
gpt4 key购买 nike

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

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

  • sql_sever.domain.com 上运行 SQL Server在服务帐户下 domain\svc_sqlserver
  • app_server.domain.com 上运行 Django 网站在服务帐户下使用 IIS domain\svc_appserver使用 Windows 身份验证和 ASP.Net 模拟(提供程序设置为 Negotiate:Kerberos -> Negotiate -> NTLM)和 useAppPoolCredentials=True
  • 通过设置 Trusted_Connection=yes 使用 Windows 身份验证从 django 连接到 SQL 服务器在连接中
  • domain\svc_sqlserver 的 Kerberos 身份验证配置的 SPN和 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
  • 双方都信任svc_sqlserversvc_appserver委托(delegate)给 MSSQLSvc服务和额外的domain\svc_appserver我添加了 HTTP服务也(来自上面的列表)

  • 结果 :
  • Kerberos 身份验证适用于 SQL Server。通过查看 auth scheme of connected users 确认
  • Kerberos 身份验证适用于 Django 网站。检查确认WWW-Authenticate响应头和 Authorization请求头(Negotiate 被正确使用)
  • Sql server 只能在 domain\svc_appserver 的上下文下运行何时应该在 domain\remote_user 下运行

  • 我已经为此工作了一个多星期,但是对于我的一生,我无法弄清楚如何将经过身份验证的用户上下文从 IIS 传递到 SQL Server。我浏览了数百个在网上找到的链接,但现在我不确定该怎么做。

    还有什么我想念的吗?在建立与数据库的连接之前,Django 中有什么方法可以设置用户的上下文吗?如果有人可以提供帮助,我将不胜感激。谢谢!

    我正在使用 :
  • django 2.0.7
  • django-pyodbc-azure
  • Python 3.6.5
  • IIS 10、SQL Server 2014
  • 最佳答案

    我不相信在 FastCGI 或 Kestrel 工作进程中运行的任何东西都实现了模拟。参见例如 ASP.NET 核心:

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

    如果您使用 HTTP 基本身份验证,它要求用户通过密码进行 fork ,您可以执行 Logon使用 Win32 并自己进行模拟。但是对于 NTLM 和 Kerberos,没有简单的方法可以从您的 python 进程内部模拟调用用户。

    或者,如果这是一个自定义应用程序,您可以使用 SQL Impersonation ,或将最终用户的身份传递给 SESSION_CONTEXT服务器端代码可以看到它。也有可能增强 django-pyodbc-azure 来做到这一点。

    我能想到的唯一另一件事是通过实现 ASP.NET HttpHandler 来滚动您自己的 Django 托管。冒充用户并管理 python processes running under the end user's identity .

    关于sql-server - 从 IIS 到 SQL 服务器的 Kerberos 双跳委派(使用 django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52120859/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com