C#中的LDAP和ActiveDirectory身份验证

本文关键字:ActiveDirectory 身份验证 LDAP 中的 | 更新日期: 2023-09-27 18:24:21

我是LDAP和active directory身份验证的新手,我只研究了一些关于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服务器中托管,并且我试图用服务器IP地址访问它时,我面临着一些问题,比如

ContextType.Domain,Environment.UserDomainName and  Environment.UserName

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

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

C#中的LDAP和ActiveDirectory身份验证

Environment.UserDomainName返回Environment.UserName的域部分,例如"mydomain.com",所以您不希望这样。

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

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

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