Добавление прокси в любое приложение на IIS

от автора

В корпоративной среде часто возникает необходимость в веб-приложении на asp.net реализовать возможность выхода через прокси сервер (даже с авторизацией) для скачивания той или иной информации.

Например:

  • Реализуемое ПО требует на уровне приложения-сервера скачивать с веб ресурсов ту или иную информацию
  • При размещении любой CMS требуется возможность для подключения приложения к репозиторию разработчиков для скачивания тем, плагинов и т.п. (некоторые CMS вообще не устанавливаются без предварительной авторизации на стороне сервера разработчиков)
  • В SharePoint есть множество сервисов, которые требуют прямого подключения к сайтам Microsoft (пример подключение к office.com для установки внешних приложений)

Рассмотрим 2 ситуации, ориентируясь на статью MSDN:

1) Корпоративный прокси не требует авторизации

В web.config добавляем раздел defaultProxy с указанием прокси сервера.

Подробнее + код

Убедитесь в том, что вы добавляете данный раздел в раздел configuration и также после подраздела configSections, если он присутствует. Для параметра proxyaddress укажите правильный адрес вашего прокси.

<configuration>  <system.net>    <defaultProxy useDefaultCredentials="true">      <proxy proxyaddress="http://proxyserver:80" bypassonlocal="true" />    </defaultProxy>   </system.net> </configuration> 

2) Корпоративный прокси требует авторизации

2.1) Авторизуем сервер (кардинальный подход, не всегда удобен и менее безопасен). В данном варианте используются такие же настройки в web.config, как в пункте 1), но также необходимо, чтобы администраторы прокси предоставили доступ для сервера по его ip адресу для определенных веб-ссылок или на весь интернет. Учтите, что часто очень сложно определить, на какие же ссылки пытается получить доступ CMS или SharePoint server.

2.2) Модуль авторизации для веб-приложения

Если обратить пристальное внимание на ту же статью в MSDN то для раздела defaultProxy можно указать дополнительный подраздел module.

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

Подробнее + код + картинки

  • В visual studio cоздайте новую библиотеку MyCorpAssembly.dll net 2.0 (чтобы запускалась и в старых сайтах):

  • Переименуйте класс в MyCorpProxy:

  • Добавьте следующий код: Не забудьте указать свои строки для «user», «password»,«domain» и «my.proxy:8080». В данном примере пароль хранится в открытом виде, вы же можете получать и хранить его каким угодно секретным способом.

    Также лучше создать сервисную, доменную запись для авторизации.

    using System; using System.Collections.Generic; using System.Net; using System.Text;  namespace MyCorpAssembly {     public class MyCorpProxy : IWebProxy     {         public ICredentials Credentials         {             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;         }      } } 

  • Подпишите библиотеку своим ключом:

  • Скомпилируйте и положите получившийся MyCorpAssembly.dll в bin папку сайта
  • Добавьте в web.config сайта новый раздел defaultProxy:
      <system.net>      <defaultProxy enabled="true" useDefaultCredentials="false">       <module type = "MyCorpAssembly.MyCorpProxy, MyCorpAssembly" />     </defaultProxy>   </system.net>  

  • Можете перезапускать приложение IIS и проверять доступность внешних ресурсов.

    Думаю, такой же функционал может работать и для приложений, написанных на .net, но я не проверял.

    Просто в папке рядом с приложением необходимо создать AppName.exe.Config файл и добавить туда раздел defaultProxy

ссылка на оригинал статьи https://habrahabr.ru/post/278453/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *