【发布时间】:2023-03-04 09:49:01
【问题描述】:
我有一个运行 Windows 身份验证和模拟设置为 true 的 .net Web 服务。但是,当应用程序连接到数据库时,它需要停止模拟并作为应用程序池的服务帐户运行。
我的理解一直是停止模仿的方法是运行以下代码。
WindowsImpersonationContext ctx = WindowsIdentity.Impersonate(IntPtr.Zero);
然后当我想重新开始模仿时
ctx.Undo();
但由于某种原因,当我运行我的代码时,它永远不会停止模拟调用用户,而是继续作为该用户,并且无法连接到使用集成安全性且只有服务帐户具有数据库访问权限的 sql db。
为了让它正常工作,我在这里缺少什么?
【问题讨论】:
-
stackoverflow.com/questions/125096/… 确认您的方法。当您说“它永远不会停止模拟”时,您是从调试会话中知道的,还是仅仅通过 SQL 连接失败的事实知道这一点?在“expersonation”之后,是否肯定在同一个线程中进行了连接尝试?
-
啊......我的错我没有检查身份的正确位置。它似乎工作正常。我正在检查 HttpContext 而不是 WIndowsIdentity。 sql 失败是由于一个单独的问题,这似乎证实了我最初的假设。