如何在 Windows 上的 ASP.Net Core 2.0 应用程序中配置委派,并通过 Azure AD 对用户进行身份验证

如何在 Windows 上的 ASP.Net Core 2.0 应用程序中配置委派,并通过 Azure AD 对用户进行身份验证

设置:

我有一个用 ASP.NET Core 2.0 编写的 Web 应用,它使用 OpenID Connect 针对 Azure AD 进行身份验证。它在属于 Azure AD 域的计算机上运行。该应用在 Azure AD 中设置一个应用程序。

问题:

我们想使用 Azure AD 用户帐户连接到位于另一台 (Windows) 计算机上的 SQL Server 数据库。到目前为止,我一直在尝试使用模拟来实现这一点。

在我看来,这似乎是双跳问题的一个例子,但我尝试过的所有方法都没有奏效。

笔记:

  • 用户将通过域外的互联网访问该网站,因此我们不能直接依赖 Windows 身份验证
  • 通过 OpenID Connect 进行身份验证正在运行 - 我获得了预期的用户信息和声明
  • 索赔身份似乎与域用户正确对应
  • 通过使用登录凭据获取 WindowsIdentity 来模拟用户(使用 advapi32)

我尝试过的:

  • 使用 S4UClient 获取 WindowsIdentity - 我可以获得 WindowsIdentity,但它不委托。
  • 为 Web 服务器和进程设置 SPN,包括创建网站运行的服务帐户。
    • 为计算机分配 Kerberos 委派
  • 使用 UPN 声明创建 WindowsIdentity - 再次,我获得了 WindowsIdentity 但无法连接到 SQL Server。
  • 使用系统帐户运行网站(我知道这是不可取的,但无论如何它似乎不起作用,所以......)
  • 从 Web 服务器设置对 SQL 服务器的 Kerberos 约束委派
  • 将网站设置为使用 Windows 身份验证(带和不带匿名身份验证)并删除除 Negotiate 之外的所有提供程序。
  • 可能还有其他事情,如果我想到了,我会更新。

我准备开始与数据库团队讨论其他选项,但这项工作将简化用户管理。

有什么想法或建议吗?

答案1

这是有可能的,但有许多活动部件全部需要到位才能发挥作用。你可以看到我的帖子检查所有事项是否都已到位,以及一些参考文章的链接。它是为在 net452 上运行的 asp.net core 1.1 编写的,但此后我已将该应用程序更新为 net462 上的 core 2.0,除了 setup.cs 身份验证更改外,一切仍然有效。

相关内容