2013-10-15 4 views
3

У меня есть классический ASP приложение, где я аутентификация пользователей с помощью активного каталога следующим образом:Изменение активного пароля каталога в классическом ASP

sDomain = "@domain_name.abc" 

sUserID = LCase(Request.Form("UserID")) 
sPassword = Request.Form("Password") 

On Error Resume Next 

Set adObject = GetObject("WinNT:") 
Set userObject = adObject.OpenDSObject("WinNT://domain_name.abc", sUserID & sDomain, sPassword, ADS_SECURE_AUTHENTICATION) 

Select Case Err.Number 
'-2147023565 disabled account 
'-2147022989 password expired 
'0 success 
'Else some other error 
End Select 

Проблемы, которая только что пришла является то, что мы изменили нашу политику истечения срока действия пароля. Сетевые пароли никогда не истекли (не спрашивайте, компания малого размера), но теперь они истекают каждые 120 дней.

Мы включили групповую политику для этого, и всем, кто оставил свой компьютер и попытался войти в интранет, было отказано с общим сообщением об ошибке, потому что им необходимо изменить свой пароль.

Теперь я могу уловить эту ошибку, как показано выше -2147022989, и отобразить сообщение, но для людей, путешествующих, они не смогут изменить свой пароль, если только они не подключатся к ним на своих рабочих столах, что может быть проблематичным для некоторых более низкоквалифицированных пользователей и руководители.

Я думаю, что это все-таки длинный способ спросить, есть ли способ облегчить изменение пароля AD через классический ASP?

Я могу выполнить проверку требований к паролю через JavaScript.

ответ

3

Got it.

Set objIADS = GetObject("WinNT:").OpenDSObject("WinNT://domain", "Administrator", sDomainPassword, ADS_SECURE_AUTHENTICATION) 
Set objIADSUser = objIADS.GetObject("user", sUserID) 
objIADSUser.ChangePassword sOldPassword, sNewPassword 
'Alternatively: objIADSUser.SetPassword sNewPassword 
objIADSUser.SetInfo 
Смежные вопросы