Додавання проксі в будь-який додаток на 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 створіть нову бібліотеку 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","-"); }
    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


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.