Silverlight 4 и каркас безопасности - PullRequest
0 голосов
/ 05 апреля 2011

Я опытный разработчик, но новичок в Silverlight, Prism, MVVM и во всем, что с этим связано, и мне нужен гибкий подход к безопасности в новом разрабатываемом приложении. У меня есть эта модель безопасности, реализованная через пользовательскую платформу безопасности, которую я построил для WinForms (фактически Visual WebGui), но мне нужно получить некоторые рекомендации о том, как реализовать это для Silverlight или есть ли что-то уже построенное, что я могу использовать.

Все модули реализуют два интерфейса: ISecurableModule и ISecuredModule . ISecurableModule используется для регистрации модулей в репозитории безопасности. ISecuredModule используется для обеспечения безопасности.

В моем приложении Winforms при запуске (фактически после новой установки, при первом запуске) запускается модуль, который посредством рефлексии проверяет все сборки в поисках модулей, реализующих интерфейс ISecurableModule. Этот интерфейс сообщает, если модуль может быть запущен в режиме добавления, режиме редактирования, режиме просмотра или ни в одном из них (например, модуль отчетности или выборка / фильтр данных могут быть открыты только в режиме просмотра, поскольку в нем нельзя изменить данные, но запись данных может быть открыта только в Добавить, или в Добавить / Изменить, или в Просмотр) Все эти данные сохраняются в хранилище безопасности.

Чтобы определить права безопасности, я могу создать категории безопасности - например, Оператор инвентаризации, Супервизор инвентаризации, Оператор платежной ведомости, Супервизор платежной ведомости и т. Д. Для каждой категории я назначаю модули, выбранные из репозитория безопасности, с соответствующими правами (например, для Оператора инвентаризации я назначаю модуль Операция инвентаризации при приеме или Операция инвентаризации переноса с правами добавления и просмотра, а для Inventory Supervisor я назначаю все модули инвентаризации с полными правами)

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

Затем во время выполнения у меня есть концепция рабочего места (например, оболочки в Prism), где я могу загружать модули динамически (действительно динамически, я использую шаблон ServiceLocator для определения местоположения компонента на основе реализуемого им интерфейса, а затем для каждого контроллера есть контроллер класс модуля - модули, реализующие один и тот же интерфейс - который может использовать поле enum для определения того, какой модуль действительно загружать в течение времени, необходимого для обработки данных). Контроллер рабочего места использует поставщика безопасности, который проверяет права доступа для загружаемого модуля на соответствие правам доступа для текущего пользователя.

В моем приложении SL4 я хочу использовать шаблон MVVM, и поэтому я хочу, чтобы мои представления не кодировались и управляли всей функциональностью с помощью ViewModel, ICommands и привязки данных. Поэтому мне нужны некоторые предложения о том, как я могу реализовать такую ​​функциональность, которую я описал в приложении SL4. Я не особо привязан к Prism, поэтому я рассмотрю, есть ли еще один фреймворк SL4, который может помочь мне в достижении этой цели.

1 Ответ

1 голос
/ 05 апреля 2011

Вы можете попытаться защитить приложение Silverlight разными способами, но в итоге вы не можете доверять клиенту.

Несколько руководств, которые я использую:

  1. Защита провода:использовать ssl для защиты связи между SL и внутренним сервером (возможно, даже выдавать пользовательские токены, чтобы иметь возможность сделать недействительным соединение)
  2. Не полагаться на секреты в приложении Silverlight (личные ключи, пользовательские методы шифрования, изолированныехранилище), потому что они легко ломаются
  3. Поместите все важные проверки логики и безопасности на сервер.
  4. Всегда проверяйте авторизацию при получении вызова (службы);Вы никогда не узнаете, кто звонит, если не проверите.

Я использую авторизацию только для модулей, чтобы уменьшить загрузку;если вы не авторизованы для использования модуля, зачем скачивать его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...