C# ASP.Net核心Web Api中的模拟用户

C# ASP.Net核心Web Api中的模拟用户,c#,asp.net-core,active-directory,impersonation,C#,Asp.net Core,Active Directory,Impersonation,我计划在ASP.Net内核中开发一个公共Web Api。此外,还连接了一个数据库,并计划登录 使用integratedsecurity=True从我的应用程序连接到打开的数据库。是否可以使用其他用户(从active directory)连接到数据库。不是运行应用程序的用户,而是Active Directory中的任何其他用户 我的理解是: 应用程序以特定用户的身份运行集成安全=真将打开一个连接,因为该用户->不可能 模拟另一个用户需要应用程序具有提升的权限,并知道该用户的密码->不是选项 在没有

我计划在ASP.Net内核中开发一个公共Web Api。此外,还连接了一个数据库,并计划登录

使用
integratedsecurity=True从我的应用程序连接到打开的数据库。是否可以使用其他用户(从active directory)连接到数据库。不是运行应用程序的用户,而是Active Directory中的任何其他用户

我的理解是:

  • 应用程序以特定用户的身份运行<代码>集成安全=真将打开一个连接,因为该用户->不可能
  • 模拟另一个用户需要应用程序具有提升的权限,并知道该用户的密码->不是选项
  • 在没有密码的情况下这样做意味着应用程序权限必须提升到可能的最高级别->不是一个选项
  • 那么,有没有办法从我们的广告中以某个用户的身份连接到数据库?我觉得这是不可能的

    谢谢大家!

    ASP.NET核心未实现模拟。应用程序使用应用程序的 所有请求的标识,使用应用程序池或进程标识。如果 应用程序应代表用户执行操作,请使用 在中的终端内联中间件中模拟了WindowsIdentity.RunImpersonated Startup.Configure。在此上下文中运行单个操作,然后关闭 上下文


    你想通过这样做解决什么问题?我不确定我是否理解正确。web API的安全性如何?您可以获取他们的令牌并模拟他们。我们已经实现了jwt身份验证,我使用jwt令牌模拟!。其思想是,通过以当前active directory用户的身份登录数据库,可以在数据库中隐式使用当前active directory用户的安全性。另一方面(现在很普遍,我们不想要的):如果连接是使用(例如)应用程序运行的服务帐户打开的,那么我们必须通过(例如)一个字符串告诉数据库,我们想为哪个用户获取数据,以及他的权限是什么。谢谢@Bendram,但使用令牌不会起作用。我认为我们需要通过在
    advapi32.dll
    中向
    LogonUserA
    提供用户的用户名和密码来模拟,然后使用模拟上下文来真实模拟active directory用户。基本上ASP.Net Core中有没有合适的模拟方法?没有,该示例显示如何获取当前用户的身份。我已经坚持不模拟,因为这总是需要像用户名和密码一样传递用户凭据。然后我会调用Win32例程来获取用户引用,但现在我已经做了太多了。我最初的目标也是在连接数据库时进行模拟,而不是在其他地方。但谢谢,这是一个很好的参考。Windows窗体的NET Core?