Freigeben über


Converting objectSid to string

I was writing a tool yesterday that involved mucking with Active Directory and such. During the process I realized that I needed to save the objectSid of the user for later use. AD defines this property as “Octet string” saved as bytes. Following the general wisdom and internet advices to convert this byte array into proper Sid did not work.

A little more digging and I found a simple class in .Net framework - SecurityIdentifier

MSDN defines this class as “Represents a security identifier (SID) and provides marshaling and comparison operations for SIDs.”

At this point, it becomes a simple matter of instantiating this class and calling ToString:

 private static string ConvertSidToString(byte[] objectSid)
{
    SecurityIdentifier si = new SecurityIdentifier(objectSid, 0);
    return si.ToString();
}

Happy coding!

Comments

  • Anonymous
    October 18, 2011
    Thanks man...Saved me a bit of time :-)

  • Anonymous
    February 06, 2014
    plz tell in detail i want to view SID my code is as follows  DirectoryEntry de = new            DirectoryEntry(ConfigurationManager.AppSettings.Get("ADPath"));            // Authentication details            de.Username = ConfigurationManager.AppSettings.Get("ADServiceAccount"); //DOMAINUser            de.Password = ConfigurationManager.AppSettings.Get("ADServiceAccountPassword");            de.AuthenticationType = AuthenticationTypes.FastBind;            DirectorySearcher DirectorySearcher = new            DirectorySearcher(de);            DirectorySearcher.ClientTimeout = TimeSpan.FromSeconds(30);            // load the properties we are interested in            DirectorySearcher.PropertiesToLoad.Add("cn");            DirectorySearcher.PropertiesToLoad.Add("sAMAccountName");            DirectorySearcher.PropertiesToLoad.Add("mail");            DirectorySearcher.PropertiesToLoad.Add("displayName");            DirectorySearcher.PropertiesToLoad.Add("mDBStorageQuota");            DirectorySearcher.PropertiesToLoad.Add("title");            DirectorySearcher.PropertiesToLoad.Add("physicalDeliveryOfficeName");            DirectorySearcher.PropertiesToLoad.Add("telephoneNumber");            DirectorySearcher.PropertiesToLoad.Add("manager");            DirectorySearcher.PropertiesToLoad.Add("objectSID");            // filter it on exact entry - NOTE no wild card            DirectorySearcher.Filter = "(displayName=" + fullUserName.Trim() + ")";            SearchResult result;            // There should only be one entry            result = DirectorySearcher.FindOne();            if (result != null)            {                // Create a table an populate it with properties to bind togridview                DataTable myTable = new DataTable("ActiveDir");                myTable.Columns.Add(new DataColumn("Key",                System.Type.GetType("System.String")));                myTable.Columns.Add(new DataColumn("Value",                System.Type.GetType("System.String")));                DataRow myRow;                foreach (string propname in                result.Properties.PropertyNames)                {                    foreach (Object objValue in                    result.Properties[propname])                    {                        myRow = myTable.NewRow();                        myRow[0] = propname;                        myRow[1] = objValue.ToString();                        myTable.Rows.Add(myRow);                    }                }                return myTable;            }            else            {                return null;            }