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

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

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

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_web)如下所示

    这就是我在 IIS 中对 django 网站的身份验证

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

  3. 添加IIS APPPOOL\django_web到 SQL Server安全\登录

结果

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

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

    案例二。IIS、SQL Server 在同一台机器上,SQL Server 身份验证成功,但使用的身份验证凭据IIS APPPOOL\django_web不是域\远程用户

我知道此设置涉及一些 Kerberos 技巧。不幸的是,我只是一名程序员,对 Kerberos 的工作原理不太熟悉。如果有人在这方面有经验,可以解释一下此设置的工作原理,我将不胜感激。谢谢!

我在用:

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

答案1

您必须配置django_web允许委派给 SQL 服务器的帐户。我想既然如此,IIS APPPOOL\django_web您实际上需要在 Active Directory 中的计算机帐户上进行配置。或者,您可以为其创建一个自定义服务帐户。

相关内容