Подтвердить что ты не робот

Есть ли способ ограничить доступ к веб-службе ASMX, то есть странице asmx и ее WSDL?

У меня есть веб-служба С#.net, с которой мне нужно ограничить доступ. Я уже требую, чтобы мои потребители использовали имя пользователя и пароль для вызова службы. Но есть ли способ ограничить доступ к фактической странице asmx и WSDL? Мне нужно будет ограничить доступ к веб-сервису по имени пользователя/паролю и IP-адресу. Если у пользователя не было правильных учетных данных, я бы не хотел, чтобы они знали, какие веб-методы существуют в веб-сервисе.

Можно ли это сделать, хотя IIS? Я знаю, что могу ограничивать IP-адреса через IIS, но могу ли я также использовать имена пользователей/пароли?

Есть ли другой способ сделать это за пределами IIS, возможно, используя С#.net?

4b9b3361

Ответ 1

Ну, так как у ASMX у вас есть весь исполняемый стек ASP.NET в вашем распоряжении.

Шаг # 1 - управление ресурсом через .config

Примените тег <location> для ресурсов, которые вы хотите защитить. Предполагая, что это один файл ASMX, вы можете просто сделать следующее в своем web.config:

<location path="MyWebService.asmx">
    <system.web>
        <!-- resource specific options will go here -->
    </system.web>
</location>

Шаг №2 - аутентификация ваших пользователей

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

Если вы находитесь в интрасети и используете проверку подлинности Windows, я бы настоятельно предложил использовать ее, потому что это действительно самый простой вариант для настройки. Однако, если ваши услуги доступны через Интернет, то аутентификация Windows на самом деле не является вариантом, и вам нужно выбрать веб-стандарт. Простейшим из них является Основная проверка подлинности, но вы должны использовать это только через SSL, поскольку имя пользователя/пароль не зашифрованы (только кодировка base64). Следующий шаг: Дайджест-аутентификация, которая не требует SSL, потому что имя пользователя/пароль отправляются с использованием хеша MD5. В конечном итоге вы можете пойти с SSL v3, где вы выдаете конкретный сертификат клиента каждому пользователю вашего API.

Теперь, какой вариант, который вы выбираете для обеспечения безопасности, определяет, что еще нужно сделать. Если вы выберете Windows security, то это просто, как добавить следующий элемент в элемент <system.web>, который мы начали с шага # 1:

<authentication mode="Windows" />

Остальная часть протоколов безопасности потребует немного больше работы. ASP.NET не обеспечивает встроенную поддержку Basic, Digest или SSL v3. Технически вы можете использовать IIS для этого типа аутентификации для вас, но он всегда будет отображаться для пользователя Windows. Если это опция для вас, просто оставьте элемент <authentication mode="Windows" /> и настройте IIS соответственно. Если, однако, это не вариант, потому что вы просто не имеете контроля над IIS/ActiveDirectory или вам необходимо пройти аутентификацию против пользовательской базы данных пользователя, это означает, что вам нужно подключить пользовательский HttpModule, чтобы обеспечить поддержку этой безопасности протоколы.

Шаг № 3 - обеспечение ресурса

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

<authorization>
    <deny users="?" />
</authorization>

Если вы хотите разрешить определенным пользователям, которые вы могли бы изменить, чтобы сделать следующее:

<authorization>
    <deny users="*" />
    <allow users="jdoe, msmith" />
</authorization>

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

<authorization>
    <deny users="*" />
    <allow roles="My Service Users" />
</authorization>

Это хорошо сопоставляется с проверкой подлинности Windows, поскольку вы можете просто настроить группу Windows и позволить вашей команде MIS управлять пользователями в этой группе с помощью ActiveDirectory. Однако эта функция также отлично подходит для проверки подлинности без проверки подлинности, предполагая, что реализованная вами реализация безопасности предоставляет роли через реализацию IPrincipal.

Ответ 2

Вы можете выполнить аутентификацию с помощью HttpModule. SSL + BasicAuthentication должна обеспечить наилучший обмен с другими цепочками инструментов.

В HttpModule у вас есть доступ к запросу и может запретить пользователям, не прошедшим проверку подлинности, доступ только к запросам .asmx. И даже тогда вы можете позволить им получить доступ к WSDL.

Ответ 3

Два варианта. Создайте совершенно другой сайт на другом порту с заблокированными разрешениями. Преимущество этого заключается в предоставлении некоторого количества "безопасности через неизвестность" (наполовину шутя...) Или вы можете добавить новое приложение под своим сайтом (тот же порт, другой путь), в другой пул приложений и назначить разрешения таким образом.

В любом случае ваш веб-сервис не сможет разговаривать с различными "вещами" ASP.NET, такими как объект приложения (ну это будет, но это будет не одно и то же). Развертывание только немного сложнее: разворачивайте те же двоичные файлы, но включайте только один файл веб-службы.

Ответ 4

Добавьте <add path="*.asmx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> в раздел <httpHandlers> файла web.config

Ответ 5

Вы можете остановить отображение WSDL, удалив протокол документации из элемента в Machine.config

Обновление: Аутентификация веб-служб - передовая практика? Если у пользователей есть имена пользователей/паролей, вы можете использовать базовую аутентификацию HTTP через HTTPS.

Вы также можете реализовать его несколько иначе. Первым вызовом вашего веб-сервиса должен быть метод аутентификации. Клиент аутентифицирует и получает токен аутентификации. Этот токен должен быть представлен всем другим методам, предоставленным вашей веб-службой.

Ответ 6

Я не знаю, насколько это практично для вас, но вы можете рассмотреть возможность перехода на WCF. WCF полностью обратно совместим с веб-службами ASMX и позволяет вам контролировать, открыт ли WSDL, определяя конечную точку MEX (обмен метаданных). Нет конечной точки MEX, нет WSDL.