C# 中的 LDAP 和 Active Directory 身份验证

Posted

技术标签:

【中文标题】C# 中的 LDAP 和 Active Directory 身份验证【英文标题】:LDAP and ActiveDirectory authentication in C# 【发布时间】:2014-09-25 16:26:30 【问题描述】:

我是 LDAP 和活动目录身份验证的新手,我只是研究了一些关于 LDAP 身份验证的东西并使用示例应用程序完成了

我只是检查用户是否存在于 ActiveDirectory 中

public static bool DoesUserExist()
  
  using (var domainContext = new PrincipalContext(ContextType.Domain,Environment.UserDomainName))
   
     using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, Environment.UserName))
                
                    return foundUser != null;
                
            
        

在我们的本地系统中它工作正常,但是当我托管在 ActiveDirectory Server 中并且我尝试使用服务器 IP 地址访问它时,我遇到了一些问题,例如

ContextType.Domain,Environment.UserDomainName and  Environment.UserName

因为这三个值来自服务器信息而不是访问此应用程序的用户

所以请帮助我如何获取用户信息(谁访问此应用程序),以便我需要将这些信息传递给服务器并需要检查用户是否是 activedirectory 用户

【问题讨论】:

这是一个 ASP.NET 应用程序吗? 是... ActiveDirectory 身份验证使用 LDAP 【参考方案1】:

Environment.UserDomainName 返回Environment.UserName 的域部分,例如“mydomain.com”,所以你不想要那个。

Environment.UserName 本身将返回当前“登录到 Windows”的用户,即应用程序池用户 - 请参阅 MSDN。

您最好检查当前 Web 请求的身份,因此在 MVC 控制器或 WebForms 页面中,使用 this.User

或者,如果您使用 Windows 身份验证或将表单身份验证挂钩到 AD,则当前的 Thread Principal 应该是当前请求用户,因此您可以使用 Thread.CurrentPrincipal.Identity

【讨论】:

是的,我尝试使用 Thread.CurrentPrincipal.Identity.Name 但在本地系统中它工作正常,但我托管在服务器上,但它仍然只返回服务器用户名而不是客户端用户名

以上是关于C# 中的 LDAP 和 Active Directory 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

通过 C# 删除 Active Directory 中的用户

通过 LDAP 连接到 Active Directory

Active Directory 真的符合 LDAP 标准吗?

我在骆驼下使用 apache shiro,我无法使用 ldap/active 目录将组映射到角色

LDAP 和 Active Directory 结果缺少某些结果的字段

LDAP:如何从 Active Directory 中获取所有用户和组