2011-07-14 5 views
6

У меня есть клиент WPF, который подключается к службе WCF, и я хочу заблокировать некоторые функции, чтобы только определенные пользователи могли выполнять определенные действия. Служба WCF олицетворяет клиента при выполнении методов службы. ОС - Windows XP.Как я могу убедиться, что проверки IsInRole не используют кэшированные учетные данные

Я читал this question как часть моего расследования о том, как применять роли пользователя к функциям моего приложения (я хочу назначить пользователей группам безопасности AD, а затем проверить IsInRole), и я беспокоюсь, что кэшированные разрешения будут разрешить пользователям, у которых есть свои права доступа, доступ к функциям доступа, к которым у них больше нет разрешения. И наоборот, я также опасаюсь, что пользователям, у которых были установлены свои разрешения, необходимо будет выйти из своей учетной записи Windows или даже перезапустить службу WCF (наихудший сценарий), прежде чем они смогут получить доступ к новым функциям.

Каков самый простой способ убедиться, что и клиент, и сервер могут сразу увидеть изменения в группах безопасности AD?

+0

Это вполне нормально, что изменения членства в роли требуется некоторое время, чтобы быть размножены (включая пользователя нового входа в систему) .FOR пример, если у вас есть первичный и вторичный контроллер домена может также занять много времени до того, как изменения будут синхронизированы, и пользователь может получать старые разрешения от вторичного контроллера. –

+0

@Ladislav Mrnka Думаю, мне придется немного задержаться, но я особенно хочу избежать использования локально кэшированных разрешений (на машине пользователя). Я понятия не имею, предоставит ли служба WCF собственный запрос для проверки членства в роли, выдавая себя за пользователя, или получает ли он данные от клиента вместе с идентификатором. – Franchesca

ответ

2

Вы всегда можете реализовать собственный поставщик членства, который запрашивает AD. Это довольно легко, и вы будете уверены, что все оценки разрешений точны или, по крайней мере, так, как вы хотите.

Если вы обнаружили, что сервер AD на каждой оценке будет «дорогим» по производительности, вы можете создать свой собственный кеш на клиенте, который вы можете принудительно обновлять периодически или по требованию. Этот кеш может быть таким же простым, как индексированный список (например, словарь) разрешений, которые вы можете запросить довольно быстро.

Вот хорошая статья о том, как взаимодействовать с AD: http://www.codeproject.com/KB/system/everythingInAD.aspx

+0

ОК, это довольно полная статья, спасибо! Думаю, мне придется попробовать, чтобы посмотреть, насколько медленны запросы, но делать это один раз при запуске клиента - это минимум, мне нужно подключить дыру в безопасности, о которой я больше всего беспокоился :) – Franchesca