使用Windows身份验证用户(Active Directory)在IIS .NET Framework应用程序中运行进程

时间:2018-11-05 14:15:48

标签: c# asp.net .net frameworks impersonation

我正在使用具有Active Directory(LDAP)Windows身份验证的VPN。

我在具有ASP.NET模拟和Windows身份验证的IIS中设置了.NET Framework C#4.X应用程序,并且它可以正常运行,从而使我可以通过经过身份验证的VPN用户在MSSQL DB上进行连接。

我的目标是使用经过身份验证的用户从我的应用程序中运行一个进程,因为我需要运行一个python脚本,该脚本可以使某个进程并通过Integrated Security访问与DB一起使用。

我正在尝试这种方式,因为我知道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

之后,我再次尝试使用运行Python脚本的标准ApplicationPoolIdentity来获取用户并在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帐户的域名,但不幸的是我无法登录通过集成安全性访问进入数据库。

为了完成我的问题,我想告诉你,我不是.NET专家开发人员,而且我是Active Directory和Windows身份验证的绝对新手。

我觉得我想做的事是不可能的,我需要用C#重写代码,但我仍然希望从您那里获得任何建议。

非常感谢

0 个答案:

没有答案