Ответ 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.