В моем приложении WPF я хочу разрешить администраторам тестировать соединение с базой данных, используя интегрированную защиту для других пользователей. Поэтому у меня есть форма, которая позволяет администратору вводить домен, имя пользователя и пароль, а затем проверять его. Я могу безопасно обрабатывать пароль до тех пор, пока не назову LogonUser
в advapi32.dll
, который принимает string password
LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Я написал функцию утилиты, которая преобразует SecureString в строку как можно более безопасную, а затем im вызывает ее по паролю в вызове LogonUser:
LogonUser(UserName, Domain, Helper.ConvertSafely(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Так как подпись для LogonUser берет строку, если LogonUser не выполняет надлежащий уход за паролем при его выполнении, он все равно может быть в стеке вызовов в виде обычного текста после вызова. Есть ли более безопасный способ олицетворять пользователя, в котором я могу доверять, PW безопасно все время?
В основном все, что мне нужно, это WindowsImpersonationContext
, но я бы хотел получить его без пароля, когда-либо находящегося в открытом тексте.