tempo fà ho fatto qualcosa del genere in .net


codice:
 
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.DirectoryServices;
namespace INR.PrevisioniBudget
{
	/// <summary>
	/// Summary description for LeggiUtenti.
	/// </summary>
	public class LeggiUtenti : System.Web.UI.Page
	{
		protected System.Web.UI.WebControls.Label lblDati;

		
		private void GetUsers(string strFiltro)
		{
			ArrayList users = new ArrayList();

			// percorso AD, username e password per interrogare
			string path = "LDAP://myDC.ORG/DC=myDC,DC=ORG";
			
			
			string localUsername = "UtenteAutorizzato";
			string localPassword = "PWDUtenteAutorizzato";

			string strdistinguishedname = "";
			string strname = "";
			string struserprincipalname = "";
			string strgivenname = "";
			string strmemberof = "";
			string strsamaccountname = "";
			string strsn = "";
			string strmail = "";
			string strcn = "";
			int x;


			// effettuo una ricerca in ActiveDirectory
			DirectorySearcher search = new DirectorySearcher(new DirectoryEntry(path, localUsername, localPassword));
			search.Filter = "(&(objectclass=user)(objectCategory=person)" + strFiltro + ")"; // solo persone
 
			// proprietà richieste
			
			search.PropertiesToLoad.Add("distinguishedname");
			search.PropertiesToLoad.Add("name");
			search.PropertiesToLoad.Add("givenname");
			search.PropertiesToLoad.Add("memberof");
			search.PropertiesToLoad.Add("samaccountname");
			search.PropertiesToLoad.Add("sn");
			search.PropertiesToLoad.Add("mail");
			search.PropertiesToLoad.Add("cn");
			
			search.Sort.PropertyName="cn";

			search.CacheResults = true;
			search.SizeLimit = 1000; // massimo 1000 utenti
			

			// cerco gli utenti
			SearchResultCollection results = search.FindAll();
			//Response.Write(results.Count);
			foreach(SearchResult result in results)
			{
				// aggiugno lo username alla collezione
				strdistinguishedname="";
				strname = "";
				strgivenname = "";
				strmemberof = "";
				strsamaccountname = "";
				strsn = "";
				strmail = "";
				strcn = "";

				
				try
				{
					strdistinguishedname = result.Properties["distinguishedname"][0].ToString();
				}
				catch
				{
				}
				try
				{
					strname = result.Properties["name"][0].ToString();
				}
				catch
				{
				}
				try
				{
					strgivenname = result.Properties["givenname"][0].ToString();
				}
				catch
				{
				}
				try
				{
					strmemberof = result.Properties["memberof"][0].ToString();
				}
				catch
				{
				}
				try
				{
					strsamaccountname = result.Properties["samaccountname"][0].ToString();
				}
				catch
				{
				}
				try
				{
					strsn = result.Properties["sn"][0].ToString();
				}
				catch
				{
				}
				try
				{
					strmail = result.Properties["mail"][0].ToString();
				}
				catch
				{
				}
				try
				{
					strcn = result.Properties["cn"][0].ToString();
				}
				catch
				{
				}

				/*
				foreach(string propKey in result.Properties.PropertyNames)
				{
					
					Response.Write("" + propKey + "=" + result.Properties[propKey][0].ToString() + "-|
");
					//ResultPropertyValueCollection valcol = resEnt1.Properties[propKey];   
				}
				
				*/
				
				lblDati.Text = lblDati.Text + "<tr>";
				lblDati.Text = lblDati.Text + "<td>" + strdistinguishedname + "</td>";
				lblDati.Text = lblDati.Text + "<td>" + strname + "</td>";
				lblDati.Text = lblDati.Text + "<td>" + strgivenname + "</td>";
				lblDati.Text = lblDati.Text + "<td>" + strmemberof + "</td>";
				lblDati.Text = lblDati.Text + "<td>" + strsamaccountname + "</td>";
				lblDati.Text = lblDati.Text + "<td>" + strsn + "</td>";
				lblDati.Text = lblDati.Text + "<td>" + strmail + "</td>";
				lblDati.Text = lblDati.Text + "<td>" + strcn + "</td>";
				lblDati.Text = lblDati.Text + "</tr>";
				
			}
			search.Dispose();

			
			
			}
		private void Page_Load(object sender, System.EventArgs e)
		{
			// Put user code to initialize the page here
			int x;
			
			
			lblDati.Text = lblDati.Text + "<table border=1>";
			lblDati.Text = lblDati.Text + "<tr>";
			lblDati.Text = lblDati.Text + "<td>strdistinguishedname</td>";
			lblDati.Text = lblDati.Text + "<td>strname</td>";
			lblDati.Text = lblDati.Text + "<td>strgivenname</td>";
			lblDati.Text = lblDati.Text + "<td>strmemberof</td>";
			lblDati.Text = lblDati.Text + "<td>strsamaccountname</td>";
			lblDati.Text = lblDati.Text + "<td>strsn</td>";
			lblDati.Text = lblDati.Text + "<td>strmail</td>";
			lblDati.Text = lblDati.Text + "<td>strcn</td>";
			lblDati.Text = lblDati.Text + "</tr>";
			GetUsers("(CN<=e)");
			GetUsers("(CN>=e)(CN<=n)");
			GetUsers("(CN>=n)(CN<=s)");
			GetUsers("(CN>=s)");
			lblDati.Text = lblDati.Text + "</table>";
			

		}
		#region Web Form Designer generated code
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: This call is required by the ASP.NET Web Form Designer.
			//

			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{    
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion
	}
}
probabilmente avevo preso spunto da qui
http://www.aspitalia.com/script/705/...autenticazione