.net core 如何使用WindowsIdentity.RunImpersonated(句柄、操作);

.net core 如何使用WindowsIdentity.RunImpersonated(句柄、操作);,.net-core,impersonation,.net Core,Impersonation,我们正在尝试使用RunImpersonated(句柄、操作);能够从Web服务器执行REST调用,但我们很难做到这一点。Project i ASP.NET Core 2.0 MVC 我们使用以下通用方法代表登录的wnd建立imp.上下文。用户: var user = WindowsIdentity.GetCurrent(); IntPtr token = user.Token; SafeAccessTokenHandle handle = new SafeAccessTokenHandle(t

我们正在尝试使用RunImpersonated(句柄、操作);能够从Web服务器执行REST调用,但我们很难做到这一点。Project i ASP.NET Core 2.0 MVC

我们使用以下通用方法代表登录的wnd建立imp.上下文。用户:

var user = WindowsIdentity.GetCurrent();

IntPtr token = user.Token;
SafeAccessTokenHandle handle = new SafeAccessTokenHandle(token);

WindowsIdentity.RunImpersonated(handle, action);
基本上,在行动中,我们需要休息

问题是,我们可以在开发人员的机器上本地运行而不会出现任何问题,但在远程Web服务器上却不能这样做。因此:模仿

我们上面针对imp.部分的方法正确吗?因为如果我们提升任何用户凭据,我们实际上无法使用se


我们在REST-GET impl中尝试了不同的技术。如果没有上面提到的。另一方面,上面的调用更靠近我们的控制器,并在REST impl上执行。没有关于imp本身的任何细节。

我之前就担心过。据我所知,这对我很有用:

  • 创建异步操作筛选器:

  • 将其注册为任何其他筛选器。

    您是否发现了这一点?我们正在进行类似的工作(从我们的一个内部网站点调用内部网API)。我们正在获取服务器的主机名(当从API返回Windows.Identity.User.Name作为字符串时)。我们实现了与上面的代码类似的东西,现在我们得到了401s,但是正确的用户名似乎击中了服务器。。。无论如何,如果你能弄明白,我们将非常感谢你提供有关此事的任何信息!谢谢我也很好奇,在这方面是否有任何指导
     public class ImpersonationFilter : IAsyncActionFilter
        {
            public async Task OnActionExecutionAsync(
                ActionExecutingContext context,
                ActionExecutionDelegate next)
            {
                var user = (WindowsIdentity)context.HttpContext.User.Identity;
                
                await WindowsIdentity.RunImpersonated(user.AccessToken, async () =>
                {
                    await next();
                });
            }
        }