【问题标题】:Impersonate User in ASP.Net Core Web Api在 ASP.Net Core Web Api 中模拟用户
【发布时间】:2020-06-19 08:30:45
【问题描述】:

我计划在 ASP.Net Core 中创建一个公共 Web Api。还连接了一个数据库,并计划登录。

有一个从我的应用程序到使用Integrated Security=True; 打开的数据库的连接。是否可以使用不同的用户(来自活动目录)连接到数据库。不是运行应用程序的用户,而是 Active Diretory 中的任何其他用户。

我的理解是:

  1. 应用程序以特定用户身份运行。 Integrated Security=True; 将以该用户身份打开连接 -> 不可能。
  2. 假冒其他用户要求应用具有提升的权限并知道该用户的密码 -> 不是一个选项。
  3. 在没有密码的情况下执行此操作意味着必须将应用程序权限提升到可能的最高级别 -> 不是一个选项。

那么有什么方法可以从我们的 AD 中以某个用户身份连接到数据库?我觉得这是不可能的。

谢谢!

【问题讨论】:

  • 您这样做是为了解决什么问题?
  • 我不确定我是否理解正确。 Web API 的安全性如何?您可以获得他们的令牌并冒充他们。我们已经实现了 jwt 身份验证,我使用 jwt 令牌来模拟!。
  • 这个想法是,通过以该活动目录用户身份登录数据库,可以在数据库中隐式使用来自当前活动目录用户的安全性。另一方面(这几天很常见,我们不想要什么):如果使用(例如)应用程序正在运行的服务帐户打开连接,那么我们必须通过(例如)a告诉数据库字符串我们要为哪个用户获取数据以及他的权限是什么。
  • 谢谢@Bendram,但使用令牌并不能解决问题。我认为我们需要通过在advapi32.dll 中向LogonUserA 提供用户的用户名和密码来进行模拟,然后使用模拟上下文来真正模拟活动目录用户。
  • 在 ASP.Net Core 中基本上有合适的模拟方式吗?

标签: c# asp.net-core active-directory impersonation


【解决方案1】:

Is that MSDN Article what you are looking for?

ASP.NET Core 不实现模拟。应用程序与应用程序一起运行 所有请求的身份,使用应用程序池或进程身份。如果 应用程序应代表用户执行操作,使用 WindowsIdentity.RunImpersonated 在终端内联中间件中 启动。配置。在此上下文中运行单个操作,然后关闭 上下文。

【讨论】:

  • 否,示例展示了如何获取当前用户的身份。我已经坚持不模拟,因为这总是需要像用户名和密码一样传递用户凭据。然后我会调用 Win32 例程来获取用户参考,但此时我已经做的太多了。此外,我最初的目标是在连接到数据库时进行模拟,别无他法。但是谢谢,这是一个很好的参考。
  • 还有适用于 Windows 窗体的 NET Core 吗?
猜你喜欢
  • 1970-01-01
  • 2017-11-01
  • 2020-05-18
  • 1970-01-01
  • 2021-09-16
  • 2020-06-22
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多