如何使用 WindowsIdentity.RunImpersonated(handle, action);

Mic*_*uli 5 impersonation .net-core

我们正在尝试使用 RunImpersonated(handle, action); 能够从网络服务器执行 REST 调用,但我们很难这样做。项目 i ASP.NET Core 2.0 MVC。

我们有以下一般方法来建立一个小鬼。context 代表登录的 wnd。用户:

var user = WindowsIdentity.GetCurrent();

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

WindowsIdentity.RunImpersonated(handle, action);
Run Code Online (Sandbox Code Playgroud)

基本上在我们进行 REST 调用的操作中。

事情是我们可以在我们的开发机器上本地运行而没有任何问题,但我们不能在远程网络服务器上做同样的事情。因此:冒充。

是我们上面针对小鬼的方法。部分正确,因为我们实际上无法确定我们是否推广任何用户凭据?

我们在 REST-GET impl 中尝试了不同的技术。也没有上述情况。另一方面,上面的调用更接近我们的控制器和 REST impl。没有任何关于小鬼的细节。本身。

小智 0

前一段时间我还很关心。据我记得,这对我有用:

  1. 创建异步操作过滤器:
 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();
            });
        }
    }
Run Code Online (Sandbox Code Playgroud)

将其注册为任何其他过滤器。