Я создаю веб-приложение, написанное на ASP.NET и Flex. Одна из моих самых больших проблем заключается в гибкой и удобной поддержке безопасности приложения. Эта проблема усугубляется, когда задействованы различные технологии. Я постараюсь описать то, что у меня есть ниже.
Сайт выложен следующим образом:
- / mydomain.com /
- Login.aspx
- Default.aspx (хост-приложение flex [.swf])
- / Администрирование /
- AddUsers.aspx
- AddRoles.aspx
- AddPermissions.aspx
- и т.д ...
- / Услуги /
- SecurityService.asmx
- MapService.asmx
- PhotoService.asmx
- и т.д ...
В настоящее время я использую аутентификацию по формам для защиты ресурсов на сайте. Все страницы / ресурсы, не находящиеся в папке / Services /, требуют аутентифицированного пользователя и будут перенаправлены на Login.aspx, если они еще не аутентифицированы. Страницы .asmx разрешают неаутентифицированным пользователям. Чтобы защитить эти ресурсы, я выбрасываю исключение в методе SOAP. Это позволяет избежать перенаправления страниц для веб-служб SOAP, которые не поддерживаются известными мне клиентами веб-служб SOAP. Наконец, SecurityService.asmx содержит метод Login, позволяющий приложению Flex войти в систему без перенаправления на страницу Login.aspx в случае истечения срока действия файла cookie по любой причине. Поскольку созданный файл cookie отправляется с любым запросом на сервер, включая запросы, поступающие из приложения Flex, это, кажется, работает довольно хорошо.
Однако это все еще похоже на плохой подход к защите веб-сервисов. Я чувствую, что использую проверку подлинности с помощью форм для чего-то, для чего она не была предназначена. В частности, я обеспокоен:
- Эта модель не будет работать, когда службы отделены от основного веб-сайта. Это недавно обнаруженное требование, и я считаю, что проверка подлинности с помощью форм не будет работать хорошо (если вообще будет) без гораздо большего изменения и хитрости.
- Клиентам, которым Flex предоставляет доступ к услугам. Некоторые из этих клиентов могут даже не использовать cookie-файлы. Если это так, эта модель сразу разваливается. Это не является непосредственным требованием, но известно, что это одна из долгосрочных целей.
- В конечном итоге (скорее, скорее, чем позже) мы перейдем к архитектуре на основе REST (вместо SOAP), поэтому любое решение должно работать для SOAP и REST.
Итак, мой вопрос.
Каковы наилучшие механизмы аутентификации и авторизации для защиты приложения, построенного на веб-службах ASP.NET, Flex и SOAP или REST?
Примечание: я активно изучаю OAuth; Однако мне трудно найти полные примеры для изучения. Кроме того, мне нужно иметь возможность фильтровать данные, возвращаемые для данного пользователя, на основе разрешений, которые есть у пользователя. Похоже, OAuth удаляет личность пользователя из токена. Таким образом, я не уверен, как OAuth применяется в детальной модели безопасности.