C #: запрашивать у пользователя пароль, который затем сохраняется в SecureString

В небольшом приложении, которое я сейчас разрабатываю для клиента, мне нужно спросить у пользователя его имя пользователя, пароль и домен для входа в Windows, а затем использовать их с System.Diagnostics.Process.Start, чтобы запустить применение.

У меня есть текстовое поле с UseSystemPasswordChar, чтобы замаскировать введенный пароль.

Мне нужен System.Security.SecureString, чтобы передать пароль в System.Diagnostics.Process.Start.

Как преобразовать введенный текст в защищенную строку, не делая при этом один символ за другим? В качестве альтернативы: есть ли лучший элемент управления окном, чтобы запросить у пользователя пароль, который возвращает введенный текст как SecureString?


person BlaM    schedule 25.11.2008    source источник


Ответы (2)


Попробуйте взглянуть на настраиваемый элемент управления SecurePasswordTextBox. Вы пытаетесь сделать что-то похожее на команду типа «Запуск от имени», когда вы пытаетесь запустить процесс от имени другого пользователя, чем тот, который в данный момент вошел в систему? Если нет, вы можете просто вызвать Process.Start и позволить ему забрать учетные данные текущего пользователя.

Также обратите внимание на следующие ресурсы:

Лучшим вариантом, вероятно, было бы использование некоторого кода взаимодействия с p / inovke для вызова CredUIPromptForCredentials для отображения стандартного диалогового окна Windows, а затем использования этой информации либо для вызова Process.Start, либо, что более вероятно, для вызова функции CreateProcessAsUser.

person Scott Dorman    schedule 25.11.2008
comment
Это именно то, что хочет заказчик: минималистичная программа, которая позволяет пользователю запускать приложения в своем пользовательском контексте, не выходя из системы текущего пользователя, вошедшего в систему. - person BlaM; 25.11.2008
comment
разве они не могут просто щелкнуть приложение правой кнопкой мыши и выбрать «запустить от имени…»? - person John; 25.11.2008
comment
@John: Насколько я могу судить, Run as ... больше не существует в Vista. У вас есть только опция «Запуск от имени администратора». - person Scott Dorman; 25.11.2008
comment
@John: Пока они мне платят, меня не волнует, что они могут или не могут сделать :) - person BlaM; 25.11.2008

Причина, по которой SecureString хочет принимать по одному символу за раз, заключается в том, что в противном случае у вас была бы целая строка перед этим, что привело бы к тому, что строка была бы в памяти. Таким образом, использование SecureString в этом сценарии приводит к поражению цели.

person configurator    schedule 25.11.2008