Django 应用程序中的 IIS 和 SQL Server Windows 身份验证

not*_*bot 5 sql-server asp.net iis django windows-authentication

我正在尝试运行一个连接到 SQL Server 的 django 网站,使用 IIS 和 Windows 身份验证。

IIS 服务器和 SQL 服务器位于同一域下的不同计算机上,即iis_machine.example.comsql_machine.example.com

我想要实现的目标

  1. 模拟远程用户访问 IIS 上托管的 django 网站,因此他的 Windows 凭据将传递到 SQL Server 进行身份验证。

到目前为止我尝试过的

  1. 将其添加到我的 web.config 文件中以进行模拟

    <system.web> <identity impersonate="true" /> </system.web>

  2. 启用Windows身份验证并为django网站设置应用程序池(django_web),如下所示

    这就是我的 Django 网站身份验证在 IIS 中的样子

    这就是我的 django 网站应用程序池在 IIS 中的样子

  3. 将IIS APPPOOL\django_web添加到 SQL Server Security\Logins

结果

  1. 当我访问 django 网站时,IIS 提示用户输入 Windows 凭据,我可以成功登录
  2. 如果用户登录后尝试访问 SQL Server

    案例一. IIS、SQL Server 位于不同的计算机上: SQL Server 身份验证失败,并显示“用户 'domain\MACHINENAME$ 登录失败

    情况B. IIS、SQL Server 在同一台计算机上,SQL Server 身份验证成功,但使用的身份验证凭据是IIS APPPOOL\django_web而不是domain\remote_user

我知道此设置涉及一些 Kerberos 欺骗。不幸的是,我只是一名程序员,不太熟悉 Kerberos 的工作原理。如果有人在这个领域有经验,可以阐明这个设置如何工作,那将非常感激。谢谢!

我在用:

  • IIS 10 SQL
  • 服务器2014
  • Django 2.0.7
  • Python 3.6.5
  • Windows 8/10