У меня есть встроенное веб-приложение, которое теперь имеет требование хранить учетные данные пользователя для доступа к другой системе. (Насколько мне хотелось бы этого не делать, к сожалению, у меня нет выбора в этом вопросе.)
Мое веб-приложение взаимодействует с контроллером домена Windows через LDAP для проверки учетных записей пользователей. Таким образом, когда пользователь входит в мое приложение, приложение проверяет LDAP, чтобы убедиться, что он действительный пользователь, и их пароль правильный. После аутентификации пользовательские разные данные загружаются из базы данных MySQL.
Теперь мне нужно как-то сохранить имя пользователя и пароль для этой другой системы в этой базе данных, и я изучаю наиболее безопасный способ сделать это.
Один из методов, который я рассмотрел, – это шифрование учетных данных для этой другой системы с использованием пароля домена пользователя (как проверено LDAP) в качестве ключа шифрования. Таким образом, если кто-то каким-то образом получил базу данных, это было бы не очень полезно, поскольку каждая запись была бы зашифрована с помощью другого (надеюсь, в любом случае) ключа, и этот ключ не присутствовал бы в самом веб-приложении нигде. Проблема с этим методом заключается в том, что когда пользователь меняет свой пароль, сохраненные учетные данные для другой системы более недействительны. Затем мне нужно будет снова запросить другие учетные данные системы. Я не против этого, если нет другого метода.
Есть предположения? Спасибо за ваше время.
Изменить: что-то еще, о чем я только подумал, было шифрование на основе некоторых других данных, открытых для LDAP. Одно значение, которое выглядит многообещающим (а также, вероятно, небезопасным для любого в домене), является objectGUID
, который я считаю GUID для учетной записи. Я могу использовать этот ключ шифрования. Легко ли это найти пользователям домена или другим пользователям?
Редактировать # 2: я обнаружил, что любой пользователь домена может легко найти GUID через LDAP, поэтому я решил, что этот метод отсутствует. Возможно, мне придется зашифровать на основе пароля пользователя, если нет других рекомендаций.
Возможно, вам захочется узнать, поддерживает ли эта другая система какие-либо стандартные способы «единого входа». Таким образом, вам не придется изобретать колесо .
В отсутствие других предложений я собираюсь просто зашифровать вторичные учетные данные, используя пароль пользователя. Это не идеально (поскольку я потеряю данные при их обновлении), но для моего конкретного проекта в настоящий момент этого достаточно.