Переменная от UserNamePasswordValidator к принципалу - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть служба WCF с привязкой netTcp (Message - UserName).

Я реализовал свой собственный метод UserNamePasswordValidator.Validate, в этом методе я проверяю учетные данные, и там я получаю переменную, которая мне понадобится позже вмой customPrincipal.

Мой вопрос теперь, как я могу получить эту переменную из моего UserNamePasswordValidator в customPrincipal?

Редактировать

Получил, чтобы работать,Мне пришлось реализовать следующие пользовательские вещи:

  • CustomServiceCredentials
  • ServiceCredentialsSecurityTokenManager
  • UserNameSecurityTokenAuthenticator
  • UserNamePasswordValidator
  • AuthorizationPolicy

1 Ответ

0 голосов
/ 01 ноября 2011

UserNamePasswordValidator предназначен только для проверки учетных данных. Вы, вероятно, хотите System.IdentityModel.Policy.IAuthorizationPolicy. Смотрите ответ на этот вопрос .

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

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