我正在编写一个Web服务,检查用户是否存在于ActiveDirectory中,并且是否启用了用户帐户。一旦它检查了,我就继续验证他们的用户帐户。一旦他们成功输入用户名和密码,我想为我正在验证的人获取GUIDNativeGuid。我想使用GUIDNativeGUID在sql server数据库中建立关系。
我采取的方法是:

public string isAuthenticated (string serverName, string userName, string pwd)
{
    string _serverName, _userName, _pwd;
    _serverName = serverName;
    _userName = userName;
    _pwd = pwd;

    string message;

    if (DoesUserExist (_userName) == true)
    {
        if (isActive(userName) == true)
        {
            try
            {
                DirectoryEntry entry = new DirectoryEntry(_serverName, _userName, _pwd);
                object nativeObject = entry.NativeObject;
                //issue is here
                string GUID = entry.Guid.ToString();
                string GUIDID = entry.NativeGuid;
                //end of issue
                message = "Successfully authenticated";
            }
            catch(DirectoryServicesCOMException ex)
            {
                    message = ex.Message;
            }
        }
        else
        {
                message = "Account is disabled";
        }
    }
    else
    {
        message = "There's an issue with your account.";
    }
    return message;
}

当我尝试获取GUIDNativeGUID时,对于不同的用户,每次都会返回相同的ID
对于active directory中的不同对象,是否可以采用不同的方法来获取UNIQUE ID
谢谢

最佳答案

如果您使用的是.net 3.5或更高版本,则应该查看System.DirectoryServices.AccountManagement(s.ds.am)命名空间。请阅读以下内容:
Managing Directory Security Principals in the .NET Framework 3.5
MSDN docs on System.DirectoryServices.AccountManagement
基本上,您可以定义一个域上下文并在广告中轻松找到用户和/或组:

// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
    // find a user
    UserPrincipal user = UserPrincipal.FindByIdentity(ctx, _userName);

    if(user != null)
    {
       // get the GUID
       var objectGuid = user.Guid;
    }
}

新的s.ds.am使得在广告中与用户和组一起玩变得非常容易!我现在没有要测试的广告,但我希望这确实会给您用户对象的objectGuid属性值。

09-03 19:25