DefaultNetworkCredentials имеет нулевые значения. Нужно подсказать пользователю... как?

При определенных обстоятельствах мое приложение для настольных компьютеров, использующее веб-службы SharePoint, в результате получает DefaultNetworkCredentials с нулевыми значениями, и поэтому вызов не выполняется. Затем мне нужно получить учетные данные пользователей, но я не нашел простого способа сделать это.

Я рассматриваю возможность реализации решения, описанного в http://www.pinvoke.net/default.aspx/credui/CredUIPromptForCredentialsW.html

... однако, это все еще потребует, чтобы я обработал пароль, который я действительно предпочел бы не делать. Я посмотрел, но не смог найти более прямой метод, который запрашивает пользователя и возвращает NetworkCredential напрямую, без необходимости хранить пароль?

Спасибо,

РЕДАКТИРОВАТЬ: Похоже, что я не собираюсь найти именно то, что я ищу... Я должен сам подсказать пользователю, когда это произойдет.

Однако, если я правильно интерпретирую некоторые из этих ответов, это может быть условием ошибки для DefaultNetworkCredentials, чтобы быть нулевым, как это в первую очередь. Это тот случай? Есть ли способ принудительно заполнить DefaultNetworkCredentials, или это действительно простой кеш, который просто запоминает последний домен / идентификатор пользователя / пароль, использованный для целевого URI (в тот день? Это приложение / сеанс?).

3 ответа

Решение

Я не думаю, что вы можете избежать обработки в первый раз. Но вы подключитесь к диспетчеру учетных данных, чтобы они были кэшированы с этого момента. Вот статья о том, как это сделать. Это тяжело в p/invoke, но может дать вашим пользователям более последовательный опыт.

Работайте над основной проблемой, используя нулевые учетные данные, вместо того, чтобы приставать к пользователю за информацию, которую он уже ввел.

Если вы не хотите, чтобы они могли входить в SharePoint иначе, чем текущая учетная запись (возможно, полезная функция).

В.NET есть код для работы с учетными данными, так почему бы не угадать это, перейдя во внешние библиотеки DLL и добавив еще одну зависимость в свое приложение?

Я не знаю достаточно о рисках безопасности кода, которые у вас есть в вашей среде, но я бы подумал, что хранение объекта учетных данных только в клиентской памяти будет "достаточно безопасным" для большинства ситуаций.

Я не знаю что-то, что обрабатывает пароль для вас, но SecureString может быть полезным.

Другие вопросы по тегам