Добавление разрешений в сложную систему - PullRequest
0 голосов
/ 09 июня 2009

У меня есть проект с несколькими отдельными компонентами, которые все должны общаться друг с другом. Сейчас я пытаюсь найти хороший способ разделения системы разрешений между каждым компонентом.

3 основных компонента:

  1. Веб-приложение ASP.Net
  2. Приложение Silverlight (обслуживается веб-приложением)
  3. Служба Windows, предоставляющая некоторые веб-службы WCF для приложения Silverlight.

Серверы (1,3) оба имеют доступ к одной и той же базе данных. Связь между каждым компонентом осуществляется веб-службами WCF.

Мне нужно убедиться, что тот, кто запрашивает информацию из Службы Windows (3), является пользователем с правильными правами доступа к ней. Приложение Silverlight (2) - это источник запросов. На данный момент никакая пользовательская информация не доступна для службы Windows (1), поскольку она полностью отделена от приложения Asp.Net (3). Я не хочу хранить и передавать имя пользователя и пароль, и пользователь должен будет ввести свои учетные данные только один раз, что происходит при входе в приложение ASP.Net (1).

Как можно получить идентификацию пользователя в службе Windows (3)?

(я опубликую возможность, которую я вижу в качестве ответа ниже.)

Ответы [ 3 ]

1 голос
/ 09 июня 2009

Если бы это зависело от меня, я бы использовал для аутентификации информацию аутентификации (пользователя) из ASP-логина. Этот объект автоматически передается на все веб-страницы ASP.NET, поэтому он всегда доступен в любое время, когда вам нужно вызвать службу Windows, и вы сможете легко проверить разрешения.

1 голос
/ 09 июня 2009

Вы можете защитить вызовы между Silverlight и ASP.NET, используя ASP.NET Application Services, который предоставляет механизм аутентификации ASP.NET для Silverlight. Затем приложение Silverlight сохранит информацию о сеансе для последующих вызовов ASP.NET. В прошлом я создавал службы WCF в приложении ASP.NET и использовал атрибут PrincipalPermission (http://msdn.microsoft.com/en-us/library/ms731200.aspx) для защиты методов службы WCF с помощью информации для входа в систему, предоставленной в Silverlight. Этот сценарий работает без нареканий и не требуют, чтобы вы создали свои собственные механизмы безопасности, такие как передача идентификатора сеанса или строки, которая указала бы имя пользователя (не рекомендуется). Я думаю, что эта настройка также будет работать для вас между несколькими серверами, но я не уверен, как хостинг Служба WCF в Службе Windows будет влиять на безопасность. Может существовать способ включить некоторую форму олицетворения между ними. Обязательно изучите ASP.NET Application Services для обеспечения безопасности # 1 и # 2, и если вам удастся разместить свой WCF Услуги в IIS, тогда он будет отвечать всем вашим требованиям с очень небольшим количеством работы, необходимой с вашей стороны.

0 голосов
/ 09 июня 2009

Я вижу одну возможность передачи идентификатора сеанса из приложения ASP.Net для идентификации пользователя.

Когда приложение Silverlight (2) обслуживается из Asp.Net (1), ему может быть передан идентификатор сеанса. Затем, когда приложение Silverlight (2) отправляет запросы в службу Windows (3), оно может передать идентификатор сеанса в качестве параметра. Служба Windows (3) может использовать службу WCF, предоставляемую приложением Asp.Net (1), для запроса идентификатора пользователя для данного идентификатора сеанса.

Есть ли здесь потенциальный недостаток безопасности? Мне кажется, что если кто-то сможет перехватить sessionID, он будет раскрыт и угнан независимо от того, передан ли он приложению Silverlight.

...