Можно ли указать учетные данные прокси-сервера в вашем файле web.config?

#c# #web-services #proxy

Вопрос:

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

 <defaultProxy useDefaultCredentials="false">
    <proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" />
</defaultProxy>
 

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

Есть ли какой-нибудь способ сделать это? MSDN мне не очень помогает..

Ответ №1:

Да, вы можете указать свои собственные учетные данные без изменения текущего кода. Однако для этого требуется небольшой фрагмент кода с вашей стороны.

Создайте сборку под названием SomeAssembly.dll с этим классом :

 namespace SomeNameSpace
{
    public class MyProxy : IWebProxy
    {
        public ICredentials Credentials
        {
            get { return new NetworkCredential("user", "password"); }
            //or get { return new NetworkCredential("user", "password","domain"); }
            set { }
        }

        public Uri GetProxy(Uri destination)
        {
            return new Uri("http://my.proxy:8080");
        }

        public bool IsBypassed(Uri host)
        {
            return false;
        }
    }
}
 

Добавьте это в свой конфигурационный файл :

 <defaultProxy enabled="true" useDefaultCredentials="false">
  <module type = "SomeNameSpace.MyProxy, SomeAssembly" />
</defaultProxy>
 

Это «вводит» новый прокси-сервер в список, и поскольку учетные данные по умолчанию отсутствуют, класс WebRequest сначала вызовет ваш код и запросит ваши собственные учетные данные. Вам нужно будет разместить сборку некоторого узла в каталоге bin вашего приложения CMS.

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

Комментарии:

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

2. Мы не должны делать 1 и т. Д., Но это действительно простое и элегантное решение!!

3. Есть идеи, как передать учетные данные ассамблее? Я не хочу жестко кодировать эту информацию, так как пользователи должны иметь возможность изменять ее позже, не перекомпилируя код.

Ответ №2:

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

   <system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy proxyaddress="proxyAddress" usesystemdefault="True"/>
    </defaultProxy>
  </system.net>
 

Ключевым элементом в этом процессе является изменение параметров IIS, гарантирующее, что учетная запись, запускающая процесс, имеет доступ к прокси-серверу.
Если ваш процесс выполняется под управлением LocalService или NetworkService, то это, вероятно, не сработает. Скорее всего, вам понадобится учетная запись домена.

Ответ №3:

Вы можете указать учетные данные, добавив новые общие учетные данные вашего прокси-сервера в Диспетчере учетных данных Windows:

1 В Web.config

 <system.net>    
<defaultProxy enabled="true" useDefaultCredentials="true">      
<proxy usesystemdefault="True" />      
</defaultProxy>    
</system.net>
 
  1. В Панели управленияВсе элементы панели управленияДиспетчер учетных данных >>> Добавьте общие учетные данные

Интернет или сетевой адрес: ваш прокси-адрес
Имя пользователя: ваше имя пользователя
Пароль: вы передаете

Эта конфигурация работала для меня, без изменения кода.

Комментарии:

1. Панель управленияВсе элементы Панели управленияДиспетчер учетных данных

2. Работает для меня за прокси-сервером Microsoft ISA

Ответ №4:

Для этой цели можно использовать службы каталогов/поиск LDAP. Это предполагает некоторые изменения на уровне инфраструктуры, но в большинстве производственных сред такое предусмотрено

Комментарии:

1. Я понятия не имею, как это могло бы помочь. Серверы находятся не в одном домене, если это имеет значение..