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

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

15
задан John Saunders 21 October 2009 в 20:34
поделиться

5 ответов

Итак, поскольку это 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, это так же просто, как добавить следующий элемент в Элемент , с которого мы начали на Шаге №1:

<authentication mode="Windows" />

Остальные протоколы безопасности потребуют немного дополнительной работы. ASP.NET не обеспечивает встроенной поддержки Basic, Digest или SSL v3. Технически вы можете использовать IIS для выполнения этого типа аутентификации за вас, но он всегда будет отображаться на пользователя 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. Однако эта функция также отлично работает для проверки подлинности, отличной от Windows, при условии, что реализация безопасности вы

39
ответ дан 1 December 2019 в 01:17
поделиться

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

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

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

-1
ответ дан 1 December 2019 в 01:17
поделиться

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

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

0
ответ дан 1 December 2019 в 01:17
поделиться

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

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

0
ответ дан 1 December 2019 в 01:17
поделиться

I don't know how practical this is for you, but you could consider upgrading to WCF. WCF is fully backward compatible with ASMX web services, and lets you control whether or not the WSDL is exposed by defining a MEX (metadata exchange) endpoint. No MEX endpoint, no WSDL.

-1
ответ дан 1 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: