Проблема со словом «безопасный» заключается в том, что это очень субъективный термин. То, что является «безопасным» или нет, действительно зависит от типа приложения и ущерба, который может быть нанесен в случае нарушения мер безопасности.
В каком-то смысле пароль не отображается в памяти в незашифрованном или даже зашифрованном виде. Однако я рискну вызвать гнев фанатиков безопасности и предположу, что наличие пароля пользователя на энергозависимой памяти ваших серверов не приведет к риску термоядерной войны и, следовательно, к приемлемому риску.
Что касается передачи его в AD, чего на самом деле не происходит, пароль не оставляет памяти сервера, чтобы уйти куда-либо еще. Вместо этого AD формулирует проблему, заключающуюся в том, что API безопасности, работающий локально на вашем сервере, может создать ответ на вооруженный пароль. Ответ на запрос отправляется обратно в AD, этот ответ не содержит пароль, но содержит подтверждение наличия правильного пароля.
Сказав, что в среде интрасети решение всех этих проблем (и побуждение пользователя снова ввести свое имя пользователя и пароль) кажется немного чрезмерным. Было бы лучше просто положиться на Windows Integrated Security.
Я прочитал ваши комментарии к SLaks о том, что "не рекомендуется использовать NTLM". Да, правда, что с современными машинами NTLM не так безопасен, как хотелось бы, но действительно ли он слишком слаб для ваших требований? Возможно, но встроенная система безопасности также может использовать Kerberos
.
Так что мое предложение было бы прервать вашу dll, отключить NTLM в IIS, оставив только Kerberos для обработки аутентификации. Таким образом, вы никогда не переносите пароль куда-либо, пользователю не нужно повторно вводить свой пароль, вам ничего не нужно делать в коде, и вы избегаете использования NTLM.