System.DirectoryServices & IIS - 获取用户名

Posted

技术标签:

【中文标题】System.DirectoryServices & IIS - 获取用户名【英文标题】:System.DirectoryServices & IIS - Get User Name 【发布时间】:2011-11-15 14:45:24 【问题描述】:

我不确定这是否太过分进入系统管理领域,但我还是会问我的问题 :)

我正在用 MVC3 开发一个网站。该站点使用约束委派来模拟 Windows 域中的用户并连接到该用户下的 SQL Server。这一切都没有问题。

我要做的是访问已登录用户名的显示名称属性(使用以下代码):

string displayName;
var context = new PrincipalContext(ContextType.Domain, "contoso");
var userPrincipal = UserPrincipal.FindByIdentity(context,
                                  IdentityType.SamAccountName,
                                  userName);
displayName = userPrincipal.DisplayName;

我收到 LDAP 操作错误:

异常详细信息:System.Runtime.InteropServices.COMException:发生操作错误。 System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext 上下文,IdentityType identityType,字符串 identityValue)

奇怪的是:

此操作在验收测试服务器上成功(相同配置、相同域、相同应用程序池用户、不同机器)。 使用远程桌面连接到运行 ASP.NET 应用程序池的用户下的生产机器后,此操作在控制台应用程序中成功。 操作从具有正常域帐户的随机工作站成功。 在生产服务器上的网站中操作失败。

【问题讨论】:

本地账号是否有权限查询AD?我认为域上的用户开箱即用,也许本地帐户受到限制?我想是在黑暗中拍摄的。我让你的代码在本地运行良好,但我从 Infrastructure Ogres 获得了一些额外的权限。 【参考方案1】:

我通过将网站的PhysicalPathCredentials 设置为帐户来解决这个问题。但我无法找出问题的原因,但它确实有效。

【讨论】:

以上是关于System.DirectoryServices & IIS - 获取用户名的主要内容,如果未能解决你的问题,请参考以下文章

DirectoryEntry 甚至没有添加命名空间 System.DirectoryServices? [关闭]

无法在 IIS 托管应用程序上使用 System.DirectoryServices.AccountManagement 获取 LDAP 数据

System.DirectoryServices & IIS - 获取用户名

C# 使用 System.DirectoryServices.Protocols 针对 MS Active Directory 服务器验证用户

是System.DirectoryServices.AccountManagement.GroupPrincipal线程安全吗?

DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)