Как сохранить объект пользователя в WCF - PullRequest
6 голосов
/ 19 января 2010

У меня есть служба, которая использует пользовательский «UserNamePasswordValidator», и мне нужно сохранить проверенный пользовательский объект, чтобы иметь возможность впоследствии получить его в службе. Как я могу это сделать? Или как я могу получить доступ к учетным данным пользователя позже в службе?

/ Viktor

Ответы [ 2 ]

6 голосов
/ 20 февраля 2010

Это не так просто.Проблема заключается в том, что пользовательский UserNamePasswordValidator вызывается до AuthorizationPolicy.Evaluate () и где-то посередине, WCF инициализирует сам Thread.CurrentPrincipal.Я попытался установить его внутри валидатора пароля, но он не работает, он сразу же перекрывается WCF при создании исходного участника.Единственный способ заставить его работать, это если я подожду и установлю Thread.CurrentPrincipal в методе AuthorizationPolicy.Evaluate ().

Я хотел бы услышать, как это объясняет гуру WCF, потому что я вижу, что очень много начинающих WCF имеютта же самая проблема с этим, и я вижу это как недостаток в проекте WCF.

3 голосов
/ 19 января 2010

Краткий ответ: наиболее правильным вариантом является создание IPrincipal экземпляра, представляющего прошедшего проверку пользователя, и его помещения в Thread.CurrentPrincipal .

Всекод, выполняющийся в том же потоке позже в службе, сможет получить доступ к аутентифицированному пользователю через Thread.CurrentPrincipal.

Это стандартный способ работы с аутентифицированными пользователями в .NET (и, следовательно, также в WCF).

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