【问题标题】:How to use WindowsIdentity.RunImpersonated(handle, action);如何使用 WindowsIdentity.RunImpersonated(handle, action);
【发布时间】:2018-02-24 19:14:24
【问题描述】:

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

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

var user = WindowsIdentity.GetCurrent();

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

WindowsIdentity.RunImpersonated(handle, action);

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

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

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

我们在 REST-GET 实现中尝试了不同的技术。以及没有上述。另一方面,上面的调用更接近我们的控制器和 REST impl。没有任何关于小鬼的细节。自己。

【问题讨论】:

  • 你有没有想过这个问题?我们正在处理类似的事情(从我们的一个 Intranet 站点内调用 Intranet API)。我们正在获取服务器的主机名(当从我们的 API 返回 Windows.Identity.User.Name 作为字符串时)。我们实现了与您上面的代码类似的东西,现在我们得到了 401,但正确的用户名似乎正在访问服务器......无论如何,如果您发现了有关此事的任何信息,我们将不胜感激!谢谢!
  • 我也很好奇这方面是否有任何指导

标签: .net-core impersonation


【解决方案1】:

前段时间我很担心。据我所知,这对我有用:

  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();
            });
        }
    }

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

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2019-04-08
    相关资源
    最近更新 更多