Pagina 1 van 1
User Object maken in AD via ASP (VB)
Geplaatst: 09 jan 2006, 17:01
door meon
Wat ik wil doen is vanuit een ASP-pagina een user-object maken in de Active Directory, gebruik makend van impersonation.
Hoe ik een object kan wijzigen op die manier heb ik gevonden, maar het aanmaken ervan niet.
Het probleem is denk ik ook dat ik nergens fatsoenlijke naslag vind over de methods, properties enz van die objecten.
Ter info: Ik heb nog geen enkele code uitgevoerd, ik zit niet in een testomgeving.
Code: Selecteer alles
Function CreateUser(username,company,password)
strUserDN = "CN=superuser,OU=ServiceAccounts,DC=corp,DC=local"
strPassword = "P@ssw0rd"
Set objOU = GetObject("LDAP://OU=test, DC=corp, DC=local")
Set objUser = objOU.Create ("User", "cn=" & username, strUserDN, strPassword, ADS_SECURE_AUTHENTICATION)
objUser.sAMAccountName = username
objUser.GivenName = username
objUser.Company = company
objUser.AccountDisabled = FALSE
objUser.SetPassword password
objUser.SetInfo
End Function
Maw, kunnen die parameters voor .Create in dat object?
Geplaatst: 09 jan 2006, 20:58
door meon
Wat testen verraadt hetvolgende: bij de .Create kan ik dus niet die impersonisation gebruiken, en zonder krijg ik:
Code: Selecteer alles
Active Directory error '80070005'
Algemene toegangsfout
/_layouts/WebApps/UserCreation/functions.inc.asp, line 40
Geplaatst: 09 jan 2006, 21:44
door khsw
Dat lijkt me inderdaad een security error.
't Is héél lang geleden, maar misschien kan je in VB6 een ActiveX DLL maken die je laat draaien onder Component Services (COM+). Dan kan je kiezen onder welke account deze draait (dus de impersonation die je wenst), zonder dat je de account onder wie het ASP proces draait rechten op AD dient te geven.
Geplaatst: 10 jan 2006, 09:23
door meon
Euhm... daar ben je me kwijt
Maar uiteindelijk lukt me vrijwel alles, behalve ... een paswoord zetten.
Van het moment dat ik iets doe als
dan gaat het mis met bovenstaande error.
Mag ik er op wijzen dat ik bij wijze van spreken in notepad bezig ben en dus geen Visual Studio heb
Geplaatst: 10 jan 2006, 09:43
door khsw
Ah, Notepad, mijn all-time favorite editor
Voor SetPassword heb je administrator rechten nodig denk ik. En de account waaronder IIS draait admin rechten geven lijkt me niet direct de meest aangewezen oplossing...
Geplaatst: 10 jan 2006, 10:13
door meon
Het is PrimalScript actually, beetje color-coding en code hinting is soms wel handig
Maar ik open de het OU-object als een Domain Admin, ik krijg users gemaakt, waarom zou het wachtwoord setten dan problemen geven
Ik heb niet geprobeerd door dezelfde pagina vanop de domain controller zelf eens op te vragen als administrator, misschien dat dat een ander resultaat geeft ...
Is hier trouwens ergens fatsoenlijke naslag van? Van welke methods op objecten gecreëerd uit AD-objecten kunnen enz?
Geplaatst: 10 jan 2006, 10:32
door khsw
Op de weinig overzichtelijke MSDN site kan je het één en ander vinden...
http://msdn.microsoft.com/library/defau ... g_adsi.asp
Ik zou eens proberen om Anonymous Access af te zetten zodat IIS de credentials gebruikt van de aangelogde user. Wanneer je dan voldoende rechten hebt, zou het toch moeten lukken?
Geplaatst: 10 jan 2006, 10:38
door wem
khsw schreef:Ik zou eens proberen om Anonymous Access af te zetten zodat IIS de credentials gebruikt van de aangelogde user.
draait IIS niet als service? Zo ja, dan draait deze al als er nog geen "aangelogde user" is, dus kan deze ook niet de rechten van een "aangelogde gebruiker" hebben.
Geplaatst: 10 jan 2006, 11:24
door khsw
wem schreef:khsw schreef:Ik zou eens proberen om Anonymous Access af te zetten zodat IIS de credentials gebruikt van de aangelogde user.
draait IIS niet als service? Zo ja, dan draait deze al als er nog geen "aangelogde user" is, dus kan deze ook niet de rechten van een "aangelogde gebruiker" hebben.
IIS kan echter gebruik maken van Impersonation. Elke sessie draait in een eigen securitycontext.
Stel dat je anonymous access aan hebt staan op de server en je probeert naar een directory te browsen (die uiteraard bereikbaar is via IIS) die beveiligd is. Op dat moment zal IIS je toch ook komen vragen om je username en password en zal dan met die gegevens opnieuw proberen om de directory te accessen...
Geplaatst: 10 jan 2006, 13:51
door meon
Weer meer info:
Als ik de pagina opvraag als onbekende user krijg ik fout nummer 80070005
Als ik als Domain Admin de pagina opvraag krijg ik fout nummer 80005008
Beiden met de tekst: One or more input parameters are invalid
Geplaatst: 16 feb 2006, 14:53
door meon
Ik ben er nog steeds niet uit. Ik heb de code eens uit de ASP-pagina getrokken en voer hem rechtstreeks op de server uit als VBS
Dit gebeurt er:
User 1 wordt gemaakt
User 1 wordt geënabled (+pass geset)
User 2 wordt gemaakt
User 2 enablen loopt fout: Active Directory Error 80005008 (zoals bovenstaande) op de .SetPassword .
Maw, 1x loopt het goed, 2e keer niet. Wie heeft een reden/oplossing?
Code: Selecteer alles
company = InputBox("company")
prefix = InputBox("prefix")
numberusers = InputBox("number of users")
startat = InputBox("Start at")
For i = startat to (numberusers+startat) username = LCase(prefix) & Cstr(i)
password = generatePassword(8)
return = CreateUser (username,company)
Call EnableUser(return,password)
next
'Defineer constanten
Const ADS_UC_SUPERUSER = "CN=Administrator,OU=Users,DC=extranet,DC=local"
Const ADS_UC_SUPERUSER_PWD = "P@ssw0rd"
Const ADS_UC_TARGET_OU = "OU=CustAccounts,OU=Extranet,DC=extranet,DC=local"
Function generatePassword(passwordLength)
Chars="abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ0123456789"
Randomize
lenChars = len(Chars)
For iCounter = 1 To passwordLength
iChar = Int((lenChars * Rnd) + 1)
tmpPass = tmpPass & Mid(Chars,iChar,1)
Next
generatePassword = tmpPass
End Function
Function CreateUser(username,company)
Set objRoot = GetObject("LDAP:")
Set objOU = objRoot.OpenDSObject("LDAP://"& ADS_UC_TARGET_OU, ADS_UC_SUPERUSER, ADS_UC_SUPERUSER_PWD, ADS_SECURE_AUTHENTICATION)
Set objUser = objOU.Create ("User", "cn=" & username)
objUser.sAMAccountName = username
objUser.Put "userPrincipalName", username + "@extranet.local"
objUser.Put "displayName", username
objUser.Put "Company", Cstr(company)
objUser.SetInfo
Set objUser = Nothing
Set objOU = Nothing
Set objRoot = Nothing
CreateUser = "LDAP://CN="& username &",OU=CustAccounts,OU=Extranet,DC=extranet,DC=local"
End Function
Sub EnableUser(strADsPath, wachtwoord)
Set objRoot = GetObject("LDAP:")
Set objUser = objRoot.OpenDSObject(strADsPath,ADS_UC_SUPERUSER,ADS_UC_SUPERUSER_PWD,ADS_SECURE_AUTHENTICATION)
objUser.SetPassword wachtwoord
objUser.AccountDisabled = False
objUser.Put "userAccountControl", 66048
objUser.SetInfo
Set objRoot = Nothing
Set objUser = Nothing
End Sub
Geplaatst: 17 feb 2006, 11:45
door meon
Ik heb een oplossing gevonden!
In EnableUser het LDAP-pad niet ophalen via het root-object en OpenDSObject, maar gewoon rechtstreeks via GetObject . Nadeel: geen impersonating meer mogelijk ...
Het lijkt er op dat de constanten niet zo constant zijn ...
Geplaatst: 17 feb 2006, 12:13
door BungaMan
Is het wel een valid paswoord voor user2? Als er bv regels ingesteld zijn zoals min 8 karakters, 1 hoofdletter, ...
Een beetje gegoogled en die error zou toch moeten betekenen dat het paswoord niet geldig is of een of andere parameter.
Geplaatst: 17 feb 2006, 12:19
door meon
De paswoorden zijn oké.
In een ASP-pagina kan ik geen GetObject gebruiken ... grr... terug naar af.