Запуск RunImpersonated с использованием httpContext.User.Identity.AccessToken, возвращающий меньше привилегий - PullRequest
0 голосов
/ 06 января 2020

У меня странная проблема,

У меня работает веб-сайт. net core 3.0 Я пытаюсь проверить состояние службы удаленного компьютера и пользователя, который вошел в систему через Windows Аутентификация имеет все соответствующие разрешения.

Я пытаюсь использовать Олицетворение для этой функции, однако, когда я использую токен доступа от пользователя. Удостоверение личности, которое я получаю: Не удается открыть диспетчер управления службами на компьютере «XXXX». Эта операция может потребовать других привилегий.

Однако, когда я просто создаю SafeAccessToken, используя этот метод https://docs.microsoft.com/en-us/dotnet/api/system.security.principal.windowsidentity.runimpersonated?view=netframework-4.8 Это работает.

Это мой код

             var userToImpersonate = (WindowsIdentity)httpContext.HttpContext.User.Identity;
            //Check the identity.
            logger.LogDebug("Before impersonation: " + WindowsIdentity.GetCurrent().Name);

            var result = WindowsIdentity.RunImpersonated(userToImpersonate.AccessToken, () =>
            {
                try
                {

                    var impersonatedUser = WindowsIdentity.GetCurrent().Name;
                    using (ServiceController sc = new ServiceController(name, computerName))
                    {

                        logger.LogInformation("During impersonation: " + WindowsIdentity.GetCurrent().Name);
                        serviceControllerStatus = sc.Status;
                    }
                }
                catch (Exception ex)
                {
                    logger.LogError(ex.Message);
                }
                return serviceControllerStatus;

            });
            return result;
        }
        catch (Exception ex)
        {
            logger.LogDebug(ex.Message);
            Debug.WriteLine(ex.Message);
            throw (ex);
        }
...