Запустите процесс в приложении IIS .NET Framework с проверенным пользователем Windows (Active Directory) - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю в VPN с аутентификацией Windows Active Directory (LDAP).

Я устанавливаю приложение .NET Framework C # 4.X в IIS с олицетворением ASP.NET и аутентификацией Windows, и оно работает безупречно, позволяя мне подключаться к БД MSSQL через аутентифицированного пользователя VPN.

Моя цель - запустить процесс из моего приложения с использованием аутентифицированного пользователя, поскольку мне нужно запустить скрипт python, который выполняет какой-то процесс и работает с БД через доступ Integrated Security.

Я пытаюсь так, потому что я знаю, что модуль fastcgi не разрешает имитацию с Python, я даже сделал несколько попыток, но потерпел неудачу. Я пытаюсь это даже потому, что я пытаюсь избежать переписать код в C #.

Чтобы проверить аутентификацию, я запускаю этот код:

var p = new System.Diagnostics.Process();
p.StartInfo.FileName = "C:\\Windows\\System32\\whoami.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.LoadUserProfile = true;
p.Start();
string output = p.StandardOutput.ReadToEnd();
string error = p.StandardError.ReadToEnd();

Получение этого вывода:

ERROR: Access is denied.

Похоже, что пользователь, прошедший проверку подлинности в сети, не имеет прав доступа к локальным файлам.

При изменении параметра идентификации пула приложений на «LocalSystem» я получаю следующие выходные данные:

nt authority\system

После этого я попытался снова со стандартным ApplicationPoolIdentity, выполняющим скрипт Python, чтобы получить пользователя и проверить, прежде чем учетные записи ISS получат разрешение на запуск исполняемого файла Python:

var p = new System.Diagnostics.Process();
p.StartInfo.FileName = "C:\\mypython\\scripts\\python.exe";
p.StartInfo.Arguments = "-c \"import getpass; print(getpass.getuser())\"";

Это должно вернуть имя пользователя, запустившего процесс, в моем случае он возвращает «D1TBDBTB02 $», который выглядит как учетная запись администратора БД, так как «D1TBDBTB02» - это имя домена, используемое для учетных записей SQL, но, к сожалению, я не могу войти в базу данных через доступ Integrated Security.

Чтобы закончить свой вопрос, я хочу сказать вам, что я не являюсь опытным разработчиком .NET и абсолютно новичок в Active Directory и аутентификации Windows.

Мне кажется, что то, что я хочу сделать, невозможно, и мне нужно переписать код на C #, но я все еще надеюсь получить от вас какой-либо совет.

Большое спасибо

...