Школа, в которой я работаю, использует Active Directory на сервере 2008. Каждый год наши учащиеся должны регистрировать учетные записи в сторонней системе управления школой SaaS. В прошлом для этого потребовалось много работы, так как для учащихся приходилось генерировать коды, а студенты часто теряли коды или не могли понять, как их ввести. Позже студенты, которым удалось зарегистрироваться, могут забыть свои имена пользователей или пароли и приходить ко мне (индивидуальному системному администратору) для сброса пароля и так далее.
Этой осенью мы перешли на новую версию SMS, которая, очевидно, не поддерживает какую-либо пакетную регистрацию студентов. Администрация планировала встретиться с каждым студентом, попросить его или ее имя пользователя и пароль и создать для него учетную запись вручную. Я подумал: было бы хорошо, если бы мы могли интегрировать две системы и избежать этого? Однако когда я связался со сторонней компанией, они сказали, что не интегрируются с Active Directory.
Я решил создать свою собственную систему: базу данных в сочетании с программой, которая работает как сценарий входа в систему для учетных записей студентов. Это работает так:
Теперь проблема в том, что если пароли пользователей сбрасываются в Active Directory, они не обновляются в базе данных. Если пользователи меняют свои пароли с рабочих станций, пароли не обновляются в базе данных. Также существует проблема безопасности самой базы данных.
Я заметил, что Active Directory может хранить пароли с обратимым шифрованием. Я знаю, что это официально не задокументировано, и я прекрасно понимаю, что даже написание фразы «восстановление пароля» несет с собой возможность наступления конца света. Но, глядя на риск, я не верю, что наши серверы находятся в большой опасности быть взломанными, и даже если бы это было так, злоумышленник мало что мог бы сделать с учетными записями студентов.
Как вы порекомендуете решить эту проблему? Есть ли способ отказаться от базы данных посредника и просто использовать информацию из Active Directory напрямую? Стоит ли отказаться от попыток интеграции систем?
Приветствуются любые мысли, в том числе замечания о том, насколько безрассудной была моя идея единой регистрации.
AD не разработан как инструмент для синхронизации паролей; это каталог. Извлечение из него паролей и их расшифровка (они зашифровываются так же, как и куст SAM, если используется память) не является жизнеспособным производственным решением или поддерживаемым сценарием.
Существует множество решений для управления идентификацией, которые могут подключать изменения пароля, сделанные в AD, с помощью API, аналогичного API вашего сценария входа, и распространять их. Однако сбор этих данных самостоятельно не требует сценариев; вам нужно будет написать DLL политики паролей.
Правильный способ сделать это без взлома - использовать федерацию AD и позволить другому приложению аутентифицировать пользователей в AD вместо собственной внутренней базы данных. Не похоже, что он поддерживает это, но это может быть что-то, что нужно изучить.