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 中的用户
Active Directory 真的符合 LDAP 标准吗?
我在骆驼下使用 apache shiro,我无法使用 ldap/active 目录将组映射到角色