У меня есть сервис, который использует пользовательский "UserNamePasswordValidator" и потребность сохранить проверенный пользовательский объект, чтобы смочь получить его позже в сервисе. Как я могу сделать это? Или как я могу получить доступ к учетным данным пользователя позже в сервисе?
/Viktor
Краткий ответ заключается в том, что наиболее правильный вариант - создать экземпляр IPRINCIPIPAL , который представляет аутентифицированный пользователь и положить его на Thread.CurrentPrincipal .
Вся код, работающий на одной и той же ниве, а затем в службе, сможет получить доступ к аутентифицированному пользователю через Thread.CurrentPrincipal.
Это стандартный способ борьбы с аутентифицированными пользователями в .NET (и, следовательно, в WCF).
Это не так просто. Проблема в том, что пользовательский UserNamePasswordValidator вызывается до AuthorizationPolicy.Evaluate (), а где-то посередине WCF инициализирует сам Thread.CurrentPrincipal. Я пробовал установить его внутри валидатора пароля, но он не работает, он сразу же затирается WCF, когда создается начальный участник. Единственный способ заставить его работать - это подождать и установить Thread.CurrentPrincipal в методе AuthorizationPolicy.Evaluate ().
Я хотел бы услышать, как гуру WCF объяснит это, потому что я вижу, что у многих новичков WCF есть такая же проблема с этим, и я считаю это недостатком в дизайне WCF.