<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Julien Pinquié : c#</title><link>http://weblogs.asp.net/jpinquie/archive/tags/c_2300_/default.aspx</link><description>Tags: c#</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>How to get domain user information from Active Directory in C#</title><link>http://weblogs.asp.net/jpinquie/archive/2008/02/06/how-to-get-domain-user-information-from-active-directory-in-c.aspx</link><pubDate>Wed, 06 Feb 2008 11:07:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5721777</guid><dc:creator>jpinquie</dc:creator><slash:comments>18</slash:comments><comments>http://weblogs.asp.net/jpinquie/archive/2008/02/06/how-to-get-domain-user-information-from-active-directory-in-c.aspx#comments</comments><description>
&lt;p&gt;First, we have to know the user connection name (here from an ASP.NET page).&lt;/p&gt;
  &lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;   
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; principal = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Context.User.Identity.Name;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;
  &lt;br&gt;Then we have to define some stuff :&lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;search filter including object type and connection name, &lt;/li&gt;

  
&lt;li&gt;domain, &lt;/li&gt;

  
&lt;li&gt;properties to retrieve from Active Directory. &lt;/li&gt;
&lt;/ul&gt;

&lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; filter = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(163, 21, 21);"&gt;"(&amp;amp;(ObjectClass={0})(sAMAccountName={1}))"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"person"&lt;/span&gt;, principal);&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; domain = &lt;span style="color: rgb(163, 21, 21);"&gt;"DOMAIN"&lt;/span&gt;;&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] properties = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] { &lt;span style="color: rgb(163, 21, 21);"&gt;"fullname"&lt;/span&gt; };&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;
  &lt;br&gt;To search in Active Directory, we need the following objects : &lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.directoryservices.directoryentry.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.directoryservices.directoryentry.aspx"&gt;DirectoryEntry&lt;/a&gt; : represents a node or object in the Active Directory hierarchy, &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.directoryservices.directorysearcher.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.directoryservices.directorysearcher.aspx"&gt;&lt;/a&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.directoryservices.directorysearcher.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.directoryservices.directorysearcher.aspx"&gt;DirectorySearcher&lt;/a&gt; : performs queries against Active Directory Domain Services. &lt;/li&gt;
&lt;/ul&gt;

&lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DirectoryEntry&lt;/span&gt; adRoot = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DirectoryEntry&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"LDAP://"&lt;/span&gt; + domain, &lt;span style="color: blue;"&gt;null&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;AuthenticationTypes&lt;/span&gt;.Secure);&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DirectorySearcher&lt;/span&gt; searcher = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DirectorySearcher&lt;/span&gt;(adRoot);&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;searcher.SearchScope = &lt;span style="color: rgb(43, 145, 175);"&gt;SearchScope&lt;/span&gt;.Subtree;&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;searcher.ReferralChasing = &lt;span style="color: rgb(43, 145, 175);"&gt;ReferralChasingOption&lt;/span&gt;.All;&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;searcher.PropertiesToLoad.AddRange(properties);&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;searcher.Filter = filter;&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;SearchResult&lt;/span&gt; result = searcher.FindOne();&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DirectoryEntry&lt;/span&gt; directoryEntry = result.GetDirectoryEntry();&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;
  &lt;br&gt;Finally, once information is retrieved in the DirectoryEntry object, we can get the details of each property defined.&lt;/p&gt;

&lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; displayName = directoryEntry.Properties[&lt;span style="color: rgb(163, 21, 21);"&gt;"displayName"&lt;/span&gt;][0].ToString();&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; firstName = directoryEntry.Properties[&lt;span style="color: rgb(163, 21, 21);"&gt;"givenName"&lt;/span&gt;][0].ToString();&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; lastName = directoryEntry.Properties[&lt;span style="color: rgb(163, 21, 21);"&gt;"sn"&lt;/span&gt;][0].ToString();&lt;/pre&gt;
  
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; email = directoryEntry.Properties[&lt;span style="color: rgb(163, 21, 21);"&gt;"mail"&lt;/span&gt;][0].ToString();&lt;/pre&gt;
&lt;/div&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5721777" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jpinquie/archive/tags/active+directory/default.aspx">active directory</category><category domain="http://weblogs.asp.net/jpinquie/archive/tags/c_2300_/default.aspx">c#</category></item></channel></rss>