1

我想知道这是否可能或可能的解决方法。我想让我的站点在 IIS 中运行 - 运行该站点的应用程序池将是一个可以查找 AD 的服务帐户。

要获取当前的 App Pool 帐户并设置 Principal 上下文,我有以下内容:

string appPoolAccount = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
// Define Context
PrincipalContext context = new PrincipalContext(ContextType.Domain);

现在用户将在自己的机器上运行该站点——当他们在那里启动浏览器时,启动该进程的用户名将是“test123”作为示例——因为这将是登录用户。

我需要得到的是他们正在运行浏览器的用户 ID,这样我就可以执行以下操作(第二个参数是否是运行我找到的进程的用户的字符串):

UserPrincipal user = UserPrincipal.FindByIdentity(context , 'test123');

到目前为止,我已尝试从以下位置获取该用户字符串:

string test = Environment.UserName; //Took the App Pool Account
WindowsIdentity wi = WindowsIdentity.GetCurrent(); // Took App Pool account
string test = HttpContext.Current.User.Identity.Name; //bombed out as null
4

1 回答 1

2

此代码应该可以工作,但您已在 Web.Config 中启用 Windows 身份验证并禁用匿名身份验证。

if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
   string username = System.Web.HttpContext.Current.User.Identity.Name;
}
于 2013-10-10T10:44:46.983 回答