Локально зарегистрированный пользователь может без труда изменить свой пароль при помощи Windows-интерфейса. При регистрации через Internet используются средства аутентификации, такие, как Integrated Windows, Windows NT Challenge/Response или Digest authentication, и пользователь должен регистрироваться в системе, поддерживающей Microsoft Internet Explorer (IE) и один из перечисленных методов аутентификации. В этом случае для смены пароля с помощью Windows-интерфейса пользователь может задействовать стандартные утилиты и выполнить изменение пароля во время сессии. Если же пользователь на какое-то время отключился от сети, то сменить пароль он сможет уже при следующей процедуре регистрации.

Однако если используется базовый (Basic) метод аутентификации или необходимо реализовать основанный на браузере интерфейс для изменения пароля с помощью метода аутентификации неизвестной заранее операционной системы, то простого способа решить поставленную задачу не существует. В этом случае помочь в создании пользовательского интерфейса для смены пароля может Active Directory Service Interfaces (ADSI) и некоторый несложный код.

Методы аутентификации

Перед тем как приступить к изменению пароля, нужно познакомиться с методами аутентификации, которые поддерживаются в системах Windows 2000 и Windows NT, и выбрать наиболее подходящий. В NT 4.0 может применяться так называемый анонимный доступ (Anonymous access), позволяющий любому желающему использовать Web-приложение или Web-сайт. Сервер Microsoft IIS по умолчанию предлагает учетную запись IUSR_MachineName для регистрации анонимного пользователя. Если отключить анонимный доступ, NT 4.0 может задействовать базовую аутентификацию (Basic authentication), и тогда пользователю нужно будет вводить имя и пароль, когда он впервые обратится к сайту или приложению. Операционная система проверит введенные имя и пароль, используя локальную учетную запись или базу данных домена.

Windows 2000 и Windows NT также работают с методом аутентификации, который в зависимости от используемой платформы называется по-разному: Integrated Windows security (системы на базе Windows 2000) и NT Challenge/Response (системы NT 4.0). Оба механизма схожи с методом basic, но вместо анализа имени и пароля, вводимых пользователем, в методах Integrated Windows security и NT Challenge/Response используются имя и пароль, задаваемые самой операционной системой. После этого IE задействует соответствующую базу данных безопасности Web-сервера (будь то SAM или AD) для верификации имени и пароля.

Windows 2000 поддерживает еще один метод аутентификации - Digest authentication. Он работает только с контроллерами доменов Windows 2000. Метод Digest authentication воспринимает информацию об имени и пароле на основе данных мандата (credential), присутствующих в браузере пользователя, и сопоставляет эти сведения с учетными записями, которые хранятся в базе данных безопасности Web-сервера.

Также можно выполнять аутентификацию пользователей при помощи заранее подготовленной таблицы базы данных, что удобно при создании своей собственной системы аутентификации. Однако при этом не используются преимущества системы безопасности Windows 2000 или NT 4.0, которые очевидны при проведении аутентификации самой операционной системой. Например, нельзя будет задействовать списки контроля доступа (ACL), равно как и остальные возможности системы безопасности, которые обычно используются при аутентификации пользователей самой операционной системой.

Для начала необходимо выбрать метод аутентификации, соответствующий требуемому уровню безопасности. Если нужна безопасность на уровне файлов, можно использовать любой из перечисленных методов аутентифика-ции - Basic authentication, Integrated Windows, NT Challenge/ Response, или - для Windows 2000 - Digest authentication. Если же нужно обеспечить безопасность всего лишь на уровне приложения, можно создать свою собственную систему аутентификации.

Использование интерфейса IADsUser

ADSI предоставляет в распоряжение программиста набор интерфейсов AD для обслуживания сетевых ресурсов. С помощью средств составления сценариев и интерфейса ADSI IADsUser можно разработать приложение для изменения пароля пользователя. Я написал два таких демонстрационных приложения, используя Active Server Pages (ASP). На Экране 1 приведена первая ASP-страница (ChangePass-wordEntry.asp), а Листинг 1 демонстрирует код сценария этой страницы.

Экран 1. Диалоговое окно, выводимое ChangePasswordEntry.asp.

ChangePasswordEntry.asp - это HTML-файл, который объединяет следующую информацию: имя пользователя, существующий пароль и новый пароль. После того как пользователь вводит эти данные и нажимает кнопку Submit, управление передается в Change Password1.asp. Этот файл содержит код, приведенный в Листинге 2. Именно этот код фактически меняет пароль пользователя.

Код Листинга 2 работает как в среде Windows 2000, так и в NT 4.0 для локальных учетных записей, не принадлежащих домену или AD. В блоке Callout A - блоке размерности - создается несколько переменных, которые в дальнейшем используются в файле Change Password1.asp. Оператор Option Explicit обязателен для принудительного задания размерности всех переменных.

Блок Callout B использует значения имени и пароля из файла Chan-gePasswordEntry.asp и присваивает эти значения соответствующим переменным из блока Callout A. Оператор If в блоке Callout B проверяет переменную sUser на наличие в ней хотя бы одного символа. Если переменной присвоено пустое значение, управление возвращается обратно в Chan-gePasswordEntry.asp.

Реальная работа Change Pass-word1.asp начинается в блоке Callout C. При использовании спецификации ADSI нужно установить связь с ADSI-провайдером, обслуживающим ресурсы, с которыми предполагается работать. В программе ChangePass-word1.asp таким провайдером служит WinNT, который также работает в среде Windows 2000, когда Web-сервер использует локальные учетные записи пользователей. В первой строке блока Callout C формируется строка подключения (connection string), которая сохраняется в переменной sConnect-String. С ее помощью запускается процесс установления связи с провайдером WinNT. Строка подключения состоит из имени провайдера (WinNT), разделителей (://), имени компьютера (bigboat) и закрывающего разделителя (/). Затем в конец строки подключения добавляется имя пользователя (username) и строка «,user». Имя пользователя - username - представляет собой объект user object провайдера WinNT. Это не что иное как имя учетной записи пользователя.

После того как строка подключения (sConnectString) сформирована, оператор Response.Write отображает ее, отсылая в поток HTTP. Оператор Response.Write - удобное средство отладки кода. После того как участок кода протестирован, достаточно поставить в самом начале строки символ (`) - признак комментария, чтобы код не исполнялся. Оператор Set oUser в блоке Callout C связывает переменную oUser с копией (instance) объекта user object, в котором представлена информация о пользователе из строки подключения.

Сразу после блока Callout C идут два оператора Response.Write. Они используются для отладки: с их помощью можно проверить имя и пароль, передаваемые в дальнейшем на сервер для выполнения базовой аутентификации (Basic authentication). В этих операторах используется коллекция ServerVariables объекта ASP Request. В первом операторе упоминается переменная LOGON_USER, содержащая имя пользователя, зарегистрированного в данный момент. Можно также задействовать переменную REMOTE_USER для работы с учетной записью пользователя. Второй оператор возвращает пароль (используется переменная AUTH_ PASSWORD), если при регистрации применялся метод базовой аутентификации.

Строка, в которой задается команда изменения пароля, содержится в блоке Callout D:

oUser.ChangePassword sPassword,
 sNewPassword

Первый параметр метода Chan-gePassword - это текущий пароль (sPassword). Второй параметр - новый пароль (sNewPassword). После завершения работы сценария новый пароль активизируется.

Экран 2. Заполнение формы ChangePasswordEntry.asp.

На Экране 2 изображена форма, соответствующая коду Change Password-Entry.asp. Я ввел в нужные поля имя пользователя (заголовок поля - User Name), текущий пароль (Existing Password) и новый пароль (New Password). Когда нажимается кнопка Submit, код ChangePass-word1.asp начинает исполняться. На Экране 3 показан результат работы оператора Response.Write. Если бы текущий пароль был введен неправильно, то ADSI сообщил бы об этом (см. Экран 4). Следует отметить, что ADSI не позволяет пользователям без соответствующих полномочий изменять свои пароли.

Экран 3. Результаты работы ChangePassword1.asp.

Когда для изменения пароля через Web-интерфейс применяется техника ADSI или что-то иное, необходимо настроить работу страниц по протоколу HTTP поверх Secure Sockets Layer (HTTPS). Протокол HTTPS шифрует информацию об учетной записи пользователя, поэтому в текстовым виде эти данные не передаются.

Экран 4. Результаты работы после неправильно введенного пароля.

Работа с AD и доменами NT

Оба рассмотренных HTTP-приложения, ChangePasswordEntry.asp и ChangePassword1.asp, содержат совсем немного строк кода, но тем не менее обеспечивают Web-интерфейс для изменения пользователями своих паролей как в среде Web, так и в intranet. Рассмотренный код работает на станциях Windows 2000 или NT 4.0 для тех пользователей, чьи учетные записи хранятся в локальной базе данных сервера. Однако он не будет работать, если Web-сервер представляет собой Windows 2000 с активизированной службой AD или же входит в состав домена NT.

Чтобы заставить код ChangePas-sword1.asp работать для учетных записей, хранящихся в каталоге Windows 2000 Active Direc-tory, в технике ADSI следует задействовать вместо провайдера WinNT другой провайдер - Lightweight Directory Access Protocol (LDAP). Протокол LDAP поддерживает выполнение на сервере задач, затрагивающих Active Directory. Для подключения LDAP нужно просто изменить строку подключения в файле ChangePassword1.asp следующим образом:

sConnectString = "LDAP://CN=" &
sUser & ",OU=users, " &
"DC=mycompany, DC=Com"

Приведенные изменения адаптируют строку подключения к работе с Active Directory. Вместо передачи простых позиционных параметров, как это имело место в случае с провайдером WinNT, LDAP работает с идентификаторами AD - CN для указания общего имени (объект common name) и OU для указания организационной единицы (объект organizational unit). После того как функция GetObject отработает вызов с измененной строкой подключения, с провайдером LDAP можно будет работать так же, как и ранее с WinNT. Кроме указанных выше изменений при описании строки подключения, код сценария остается одним и тем же для WinNT- и LDAP-провайдера.

Чтобы заставить код ChangePassword1.asp работать в домене NT 4.0, в строке подключения вместо имени компьютера нужно указать имя домена. Например,

sConnectString = "WinNT://" &
"MyDomain/" & sUser & ",user"

устанавливает указатель строки подключения на объект user object в домене MyDomain, а не в локальной базе данных Web-сервера. Как можно заметить, преимущества работы в технике ADSI состоят в том, что для доступа к объектам пользователя (user account) применяется практически один и тот же код, вне зависимости от того, какая установлена система - Windows 2000 или NT 4.0.

Различия в интерфейсах

ADSI-провайдеры обращаются с объектами и интерфейсами по-разному. Каждый разработчик вправе реализовать в своем фирменном провайдере уникальные объекты и интерфейсы, удобные для работы с опять-таки фирменными типами ресурсов. Провайдеры AD и WinNT имеют сходные интерфейсы, поскольку оба «выросли» из общего интерфейса IADsUser. Реализация интерфейса WinNT работает с объектами учетных записей в SAM. В Таблице 1 перечислены свойства пользователя, которые можно устанавливать или изменять с помощью интерфейса IADsUser.

Для того чтобы понять различия между интерфейсами от разных производителей, можно сначала рассмотреть реализацию интерфейса IADsUser в LDAP. Этот интерфейс позволяет устанавливать или изменять свойства ADSI, перечисленные в Таблице 2. Кроме того, в той же таблице показано, как соотносятся установки ADSI и AD. Дополнительная информация о свойствах объектов, поддерживаемых в технике ADSI, приводится в статье «IADs User» в Microsoft Developer Network (MSDN) Online Library по адресу: http://msdn.microsoft.com/library/default.asp?url=/ library/psdk/adsi/if_pers_488i.htm.

ADSI представляет собой мощный интерфейс для программирования в Windows 2000, NT 4.0 и других системах, доступ к которым осуществляется с помощью провайдеров. Его легко можно применять как для смены пароля через Internet, так и для использования других функций AD или NT 4.0.

Кен Спенсер работает в учебном центре 32X Tech, который проводит семинары для профессионалов по предлагаемым корпорацией Microsoft технологиям разработки и SQL Server. С ним можно связаться по адресу: kenspencer@32x.com.


Таблица 1. Свойства пользователя, которые можно установить или изменить с помощью интерфейса IADsUser.
AccountExpirationDateMinPasswordAge
AutoUnlockIntervalMinPasswordLength
BadPasswordAttemptsMaxBadPasswordsAllowed
DescriptionMaxLogins
FullNameMaxPasswordAge
HomeDirDriveMaxStorage
HomeDirectoryobjectSid
UserFlagsParameters
LockoutObservationIntervalPasswordAge
LoginHoursPasswordExpirationDate
LastLoginPasswordExpired
LastLogoffPasswordHistoryLength
LoginScriptPrimaryGroupID
LoginWorkstationsProfile

Вернуться


Таблица 2. Соответствие между свойствами объекта пользователя в ADSI и AD.
ADSI. AD
AccountDisableduserAccountControl Mask
AccountExpirationDateaccountExpires
BadLoginAddressNot Supported
BadLoginCountbadPwdCount
Departmentdepartment
Descriptiondescription
Divisiondivision
EmailAddressmail
EmployeeIDemployeeID
FaxNumberfacsimileTelephoneNumber
FirstNamegivenName
FullNamedisplayName
GraceLoginsAllowedNot Supported
GraceLoginsRemainingNot Supported
HomeDirectoryhomeDirectory
HomePagewWWHomePage
IsAccountLockedNot Supported
Languageslanguage
LastFailedLoginbadPasswordTime
LastLoginlastLogon
LastLogofflastLogoff
LastNamesn
LoginHourslogonHours
LoginScriptscriptPath
LoginWorkstationsuserWorkstations
Managermanager
MaxLoginsNot Supported
MaxStoragemaxStorage
NamePrefixpersonalTitle
NameSuffixgenerationQualifier
OfficeLocationsphysicalDeliveryOfficeName
OtherNamemiddleName
PasswordExpirationDateUse Group Policy Editor to set
PasswordLastChangedpwdLastSet
PasswordMinimumLengthUse Group Policy Editor to set
PasswordRequireduserAccountControl mask
PicturethumbnailPhoto
PostalAddressespostalAddress
PostalCodespostalCode
ProfileprofilePath
RequireUniquePasswordUse Group Policy Editor to set
SeeAlsoseeAlso
TelephoneHomehomePhone
TelephoneMobilemobile
TelephoneNumbertelephoneNumber
TelephonePagerpager
Titletitle
Источник: MSDN Online Library (http://msdn.microsoft.com/library/psdk/adsi/ds2pldap_3703.htm)

Вернуться