在 ASP.NET Core 中使用基于 ADFS 的身份验证来访问使用 Windows 身份验证的 SQL 服务器?

Use ADFS-based authentication inside ASP.NET Core to access a SQL Server using Windows authentication?

我有一个 SQL 服务器配置为使用 Windows 身份验证。数据库管理员使用 AD 用户和组来授予/拒绝某些表和过程的权限。

我还有与 ASP.NET 核心 Web API 通信的网络应用程序。这些应用程序使用 ADFS 进行身份验证,因此基本上所有用户都已注册到 AD。

在其中一些 API 中,我想代表经过身份验证的 AD 用户从 SQL 服务器访问数据,这意味着我无法使用 SQL 服务器身份验证。我也不能使用集成安全模式,因为它会采用运行 ASP.NET 核心服务的帐户的身份。

我的下一个想法是我应该尝试准时模拟用户,但我找不到将 ADFS 令牌转换为 WindowsIdentity 对象的单个工作示例。

那我该怎么办呢?谁能指出我正确的方向?

A​​DFS 的部分想法是它提供了一个令牌,而不是您的 Windows 有意提供的凭据。想象一下,如果您将您的域与其他服务联合起来以便您的用户可以登录,但是您允许它连接的任何服务现在都可以冒充您的 windows 凭据?他们可以使用它来重新访问您的网络。

现在,如果您的 Web API 在具有足够权限的帐户下运行,您可以简单地让它根据用户名模拟用户。

话虽如此,我不能说这是保护数据库访问的推荐方法,您真的应该只拥有一个 SQL Web 帐户 API 来访问该数据库并向最终用户提供信息。

您可以设置所谓的身份委托,您的 Web 应用程序将代表您的最终用户从 ADFS 请求另一个模拟令牌。

https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/design/when-to-use-identity-delegation