Я работаю в 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 #, но я все еще надеюсь получить от вас какой-либо совет.
Большое спасибо