В учебных целях я пишу свой собственный клиент Active Directory. Чтобы выполнять такие команды, как разблокировка учетных записей и сброс паролей, я должен ввести свою учетную запись администратора и пароль, а также использовать и WindowsIdentity.Impersonate
запустить код в качестве своей учетной записи администратора. Меня интересуют мои варианты защиты моего пароля, так как он должен использоваться много раз в моей программе.
Насколько я понимаю, я могу использовать SecureString
для хранения пароля. Но для запуска кода в качестве моей учетной записи администратора я использую WindowsIdentity.Impersonate
, и для этого мне нужно получить токен от LogonUser
, для которого требуется обычный string
, а не SecureString
.
Итак, мне пришлось бы:
Вход при запуске
Преобразование ввода в
SecureString
Очистить ввод
Затем позже, когда я хочу предварительно сформировать функцию, требующую повышения:
Преобразование ранее созданного
SecureString
вstring
Передайте преобразованную строку в
LogonUser
Очистить строку преобразования в
null
Выполнить команду
Очистить объект
LogonUser
Это правильный подход к этому? Кажется странным, что нужно преобразовать SecureString
в string
, чтобы использовать его... кажется, что это сведет на нет цель и сделает пароль более уязвимым, пока я его конвертирую.
РЕДАКТИРОВАТЬ: Исправлено имя для LogonUser
UserImpersonation
— это класс, который я написал давным-давно... по сути, это оболочка для LogonUser , который также запрашивает строку для пароля. Можно ли изменить это наIntPtr
? Если это так, могу ли я вместо этого просто передатьSecureString
в параметр пароля? (Я бы попробовал сейчас, но я больше не на работе...) - person duckwizzle   schedule 09.01.2015SecureString
напрямую, но безопасно передать пароль не составит труда. отвечу ниже... - person Ilian   schedule 09.01.2015