

Web na reset hesla uživatele v Active Directory
Chtěl bych všechny programátory poprosit o pomoc s tímto:
Chtěl bych vytvořit webové rozhraní, které bude dostupné jen ve vnitřní síti a administrátorům domény umožní reset hesla u uživatelů, kteří heslo zapomněli. Našel jsem tento kód a ptám se, jestli je správně a funkční s Active Directory (windows server 2003 level) na Windows Serveru 2008 R2. Pokud ano, tak jak bych ho měl zaimplementovat do stránky ASP.
const int ADS_UF_ACCOUNTDISABLE = 0x0002;
string pathname = "WinNT:/zs.slapanov.cz/NetID,user";
DirectoryEntry user = new DirectoryEntry(pathname);
//Optionally provide credentials to connect to SAM
//user.Username = "DOMAIN\\User";
//user.Password = "password";
user.AuthenticationTypes = AuthenticationTypes.Secure;
//Reset Password
user.Invoke("SetPassword", new object[]{"newpassword"});
//Enable account
int flags = user.Properties["userAccountControl"].Value;
user.Properties["userAccountControl"].Value = flags & ~ADS_UF_ACCOUNTDISABLE;
user.CommitChanges();
//Change Password at next logon
user.Properties["passwordExpired"][0] = 1;
Nebo by kód mohl vypadat takhle s tím, že by se musel změnit řádek Set objUser?
A kompletní a funkční řešení by mělo být toto:
ani jedno řešení IMHO nebude dělat to co po něm chceš. Bude měnit heslo autentikovaného uživatele, nikoli třetího uživatele.
Třetí řešení jsem implementoval do vlastního grafického rozhraní a přidal tam formulář na výběr organizační jednotky, protože to mám rozdělené.
Když tam nastavím Basic a Windows Authentication, tak se autorizuje uživatel, aby nedošlo ke zneužití.
Když to bude administrátor, tak může změnit heslo komukoliv. A pokud se autorizuje uživatel, může změnit heslo jen sám sobě (k tomu ale nástroj určený není)
Pak tam je pole na zadání uživatelského jména, takže bych tam mohl zadat uživatele kteréhokoliv.
Zatím jsem to ale nezkoušel.
Ani v tomto případě to nebude fungovat?
Jak bych musel kód změnit, aby administrátor mohl měnit hesla uživatelům?
přiznám se, že to, v jakém kontextu běží ASP jsem dosposud nezkoumal a nejsem si jist, že autentikace ti zajistí, aby ten skript běžel pod daným uživatelem.
edit: podle tohoto http://blogs.msdn.com/david.wang/archive/2005/06/2 9/IIS_User_Identity_to_Run_Code_Part_2.aspx by to fungovat tedy mělo.
Nicméně to mě utvrzuje v tom, že IIS je opravdu bordel na kolečkách..
Během víkendu to tedy vyzkouším a napíšu výsledek, jestli to funguje.
Přímo to nefungovalo. Je nutná např. autorizace na LDAP serveru a aby bylo nastaveno, že si uživatel musí heslo při příštím přihlášení změnit, je nutné přidat jeden krátký příkaz.
Tento skript už funkční je, který jsem poté implementoval do ASP stránky.
Na stránky se uživatelé zatím autorizují pomocí základního ověřování a tyto údaje jsou pak použity pro připojení k LDAP.
Osobně bych si moc dobře rozmyslel udělat do bezpečnosti a důvěryhodnosti AD taková vrata... obzváště ve tvém prostředí, v jakém se dle toho zdrojáku pohybuješ.
Podotázka: co je špatného na MMC snap-inu pro AD Users & Computers? Proč jej adminům nenainstaluješ lokálně?