.NET Core API не может переключить контекст на другую учетную запись для запуска исполняемого файла.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 .NET Core API не может переключить контекст на другую учетную запись для запуска исполняемого файла.

Сообщение Anonymous »

У меня есть приложение .NET Core 6.0, которое работает на IIS 7. Пул приложений работает под учетной записью, локальной для компьютера, но не для локальной системы, назовите ее «локальная-системная-веб-учетная запись». Я пытаюсь запустить исполняемый файл из API, но делаю это с учетными данными учетной записи, присоединенной к домену, назовем это «учетная запись домена с другим доступом».
Оба пользователя учетные записи имеют доступ к папке на диске C:\, к папке под названием Tools. В Tools есть единственное приложение HelloWorld.exe, которое просто печатает «Hello World!». в командную строку и завершает работу (новое стандартное консольное приложение).
Когда я запускаю конечную точку API, которая не переключается на учетную запись домена, выходные данные следующего вызова API имеют вид

Код: Выделить всё

[HttpGet("api/v1/test/noContextSwitchingTest")]
public async Task NoContextSwitchingTest() {
var prInfo = new ProcessStartInfo {
FileName = @"C:\tools\helloworld.exe",
Arguments = "",
ErrorDialog = false,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
};
var stdout = new StringBuilder();
var stderr = new StringBuilder();

using (System.Diagnostics.Process proc = new()) {
proc.StartInfo = prInfo;
proc.EnableRaisingEvents = true;
proc.ErrorDataReceived += (sender, errorLine) => { if (errorLine.Data != null) stderr.AppendLine(errorLine.Data); };
proc.OutputDataReceived += (sender, outputLine) => { if (outputLine.Data != null) stdout.AppendLine(outputLine.Data); };
proc.Start();
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();
proc.WaitForExit();
}
return Ok(new { Out = stdout.ToString(), Erro = stderr.ToString() });
}

Код: Выделить всё

{ "out": "Hello, World!\r\n", "erro": "" }
Когда я запускаю следующую конечную точку API,

Код: Выделить всё

   [HttpGet("api/v1/test/WithContextSwitchingTest")]
public async Task WithContextSwitchingTest() {
var prInfo = new ProcessStartInfo {
FileName = @"C:\tools\helloworld.exe",
Arguments = "",
ErrorDialog = false,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
};
prInfo.UserName = "domain-account-with-different-access";
prInfo.PasswordInClearText = "PASSWORD";
var stdout = new StringBuilder();
var stderr = new StringBuilder();

using (System.Diagnostics.Process proc = new()) {
proc.StartInfo = prInfo;
proc.EnableRaisingEvents = true;
proc.ErrorDataReceived += (sender, errorLine) => { if (errorLine.Data != null) stderr.AppendLine(errorLine.Data); };
proc.OutputDataReceived += (sender, outputLine) => { if (outputLine.Data != null) stdout.AppendLine(outputLine.Data); };
proc.Start();
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();
proc.WaitForExit();
}
return Ok(new { Out = stdout.ToString(), Erro = stderr.ToString() });
}
при переключении на доменную учетную запись получаю ошибку в средстве просмотра событий

Код: Выделить всё

Application popup: HelloWorld.exe - Application Error : The application was unable to start correctly (0xc0000142). Click OK to close the application.
и следующий вывод API

Код: Выделить всё

{
"out": "",
"erro": ""
}
Но больше ничего. Исключение не создается. Он просто не работает молча, и в стандартном выходе или стандартной ошибке ничего не отображается.
Если я переключу пул приложений на запуск от имени учетной записи домена в IIS и повторно запущу конечную точку без переключения контекста, HelloWorld работает нормально, поэтому я знаю, что учетная запись домена может запустить исполняемый файл и получить к нему доступ.
Мне нужен совет по другому коду, который можно использовать, или областям, представляющим интерес для безопасности. это может помешать переключению.

Подробнее здесь: https://stackoverflow.com/questions/786 ... executable
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»