UserNamePasswordValidator предназначен только для проверки учетных данных. Вы, вероятно, хотите System.IdentityModel.Policy.IAuthorizationPolicy
. Смотрите ответ на этот вопрос .
Обновление: Проблема в том, что OperationContext
еще не доступен в UserNamePasswordValidator
, поэтому вы не можете использовать его для передачи вашей контекстной переменной в точку, где вы можете создать экземпляр пользовательского участника (* 1 010 *). Поэтому я бы создал статический словарь с именем пользователя (значения - это ваш метод аутентификации, если я вас правильно понял), доступный как для пользовательской реализации UserNamePasswordValidator
, так и IAuthorizationPolicy
. Если вы используете .NET 4 ConcurrentDictionary
- это путь, потому что вам нужно иметь дело с параллелизмом. Таким образом, ваш валидатор вставит / обновит пару username / auth-method в словарь, а ваш класс IAuthorizationPolicy
захватит его по имени пользователя (вы можете получить его из EvaluationContext
) и повторно создадите экземпляр участника. К сожалению, я не могу представить более элегантное решение (если есть).