Monthly Archives: Kwiecień 2014

Odblokowanie konta w Active Directory

2014-04-16

W jednym z tworzonych przeze mnie systemów pojawiła się konieczność dodania funkcjonalności pozwalającej na odblokowywanie kont użytkowników w Active Directory (zablokowanych na skutek kilkukrotnego podania błędnego hasła). Standardowa procedura odblokowania konta to wejście do konsoli Active Directory i zaznaczenie odpowiedniej opcji w ustawieniach danego użytkownika:

ADUnlockAccount

Aby zrealizować to zadanie z poziomu kodu wystarczy skorzystać z klas PrincipalContext i UserPrincipal znajdujących się w przestrzeni System.DirectoryServices.AccountManagement:

string domain = "domain.com";
string container = "OU=Test,DC=domain,DC=com";
string accountName = "SC10006";

using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, domain, container))
{
	using (UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext, accountName))
	{
		if (userPrincipal != null)
		{
			userPrincipal.UnlockAccount();
			userPrincipal.Save();
		}
	}
}

Klasa PrincipalContext pozwala na połączenie z usługą Active Directory. W konstruktorze podajemy typ kontekstu (Machine, Domain, ApplicationDirectory) oraz opcjonalnie: nazwę dla wybranego typu kontekstu (w tym przypadku nazwę domeny), lokalizację szukanego obiektu (w tym przypadku OU, w którym znajduje się użytkownik) oraz dane uwierzytelniające. Jeżeli nie podamy tych ostatnich, operacja wykonana zostanie w kontekście bieżącego użytkownika (musi on więc posiadać do niej uprawnienia).
Klasa UserPrincipal odpowiada za odnalezienie użytkownika i wykonanie operacji odblokowania konta.

Więcej informacji na MSDN: System.DirectoryServices.AccountManagement, PrincipalContext, UserPrincipal.

Reklamy

FIM – Extensions Directory

2014-04-03

Podczas tworzenia rozszerzeń dla Synchronization Service często istnieje potrzeba wykorzystania własnych plików konfiguracyjnych. Zazwyczaj pliki takie umieszczamy razem z biblioteką w katalogu Extensions. Aby później odczytać plik konfiguracyjny musimy odwołać się do katalogu Extensions, i tu z pomocą przychodzi właściwość ExtensionsDirectory w klasie Microsoft.MetadirectoryServices.Utils. Właściwość ta zawiera pełną ścieżkę do interesującego nas katalogu. Oto przykład użycia własnego pliku konfiguracyjnego znajdującego się w katalogu Extensions:

public static KeyValueConfigurationCollection ReadConfigFromFile()
{
	string configPath = Path.Combine(Utils.ExtensionsDirectory, Constants.ConfigFile);
	if (!File.Exists(configPath))
	{
		throw new ConfigurationErrorsException(String.Format("{0} file not found.", configPath));
	}

	ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
	configMap.ExeConfigFilename = configPath;
	Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
	AppSettingsSection section = config.AppSettings;
	if (section == null)
	{
		throw new ConfigurationErrorsException(String.Format("Invalid or missing appSettings section in {0} file.", Constants.ConfigFile));
	}

	return section.Settings;
}

Więcej informacji o klasie Microsoft.MetadirectoryServices.Utils: MSDN