Что ж, поскольку это 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 на самом деле не вариант, и вам нужно выбрать веб-стандарт. Самым простым из них является Basic Authentication , но вы должны only использовать это через SSL, так как имя пользователя / пароль не зашифрованы (только в кодировке base64). Следующий шаг после этого - Дайджест-аутентификация , который не требует SSL, потому что имя пользователя / пароль отправляются с использованием хеша MD5. В конечном итоге вы можете воспользоваться SSL v3 , где вы выдаете определенный клиентский сертификат каждому пользователю вашего API.
Теперь, какой параметр вы выбираете для безопасности, диктует, что еще нужно сделать. Если вы выбираете безопасность Windows, это так же просто, как добавить следующий элемент к элементу <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. Тем не менее, эта функция также отлично работает для аутентификации не-Windows, при условии, что используемая реализация безопасности раскрывает роли через реализацию IPrincipal.