Как шифруется пароль в System.Net.CredentialCache.DefaultCredentials? - PullRequest
1 голос
/ 02 июня 2009

Если я передам учетные данные текущих пользователей веб-службе с помощью system.net.credentialcache.defaultcredentials, каким образом будет передаваться информация? Я не думаю, что это будет чистый текст, поэтому учетные данные должны быть зашифрованы, но как они?

1 Ответ

1 голос
/ 02 июня 2009

Это зависит от того, что сервер запрашивает в ответе HEAD.

Например, если я выполняю запрос HEAD к вашей веб-службе и один из заголовков http в его ответе - «WWW-Authenticate: NTLM», то учетные данные, хранящиеся в DefaultCredentials, будут зашифрованы с использованием NTLM, а затем отправлены с полный GET / POST / PUT / все, что угодно. Чтобы это произошло, вам нужно убедиться, что ваш веб-сервер настроен на запрос аутентификации NTLM. В IIS это случай выбора «встроенной аутентификации Windows». Я не уверен насчет TomCat, но этот пост выглядит уместным.

Однако, если ваш веб-сервер отвечает «WWW-Authenticate: Basic» для определенного ресурса (который может включать отправку кредитов в виде открытого текста в кодированном виде (ПРИМЕЧАНИЕ: не в зашифрованном виде) как base64), вы получите ArgumentException, так как он считается исключением безопасности для отправки учетных данных вашей учетной записи через базовую аутентификацию.

Веб-серверы также могут быть настроены на прием нескольких методов аутентификации, но вы всегда должны быть готовы принять самый слабый из них, поэтому предложение базовой аутентификации в качестве «запасного» означает, что некоторые из ваших пользователей вполне могут отправлять их полномочия в виде открытого текста.

Браузер обычно выбирает самый сильный метод, доступный для него, и я подозреваю (но не знаю наверняка), что библиотеки .net будут вести себя так же.

EDIT

Пока ваш веб-сервер только запрашивает NTLM для вашего веб-сервиса, вы можете быть уверены, что любой разумный клиент не отправит учетные данные в виде открытого текста. Используя сетевые классы в .net framework, вы можете быть уверены, что если вы используете DefaultCredentials и не вводите вручную базовый заголовок auth вручную, ваши учетные данные будут отправлены в зашифрованном виде с использованием NTLM.

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

Учетные данные DefaultCredentials будут отправлены в зависимости от того, какой тип приложения запрашивает DefaultCredentails. Если это клиентское приложение, запущенное под учетной записью пользователя, учетными данными будет этот пользователь. Если это приложение ASP.NET, которое связывается с вашим веб-сервисом, оно будет использовать учетные данные для учетной записи, под которой работает пул приложений, по умолчанию это NETWORK_SERVICE.

...