设置:
我有一个用 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 身份验证更改外,一切仍然有效。