0

我是 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 用户

4

1 回答 1

0

Environment.UserDomainName返回 的域部分Environment.UserName,例如“mydomain.com”,因此您不希望这样。

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

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

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

于 2014-10-01T12:32:59.350 回答