Базовая аутентификация WCF и аутентификация по токену - PullRequest
2 голосов
/ 21 июля 2010

У меня есть служба RESTful WCF, использующая обычную аутентификацию, хост настраиваемой службы и a. У меня настроен пользовательский UserNamePasswordValidator, и пользовательский IPrincipal правильно проходит через операцию. Однако для совместимости с прежними версиями мне нужно поддерживать другой режим аутентификации. То, как это должно работать, идет:

  1. Пользователь отправляет в URI входа в систему
  2. Служба аутентифицирует пользователя, как указано выше, но возвращает маркер сеанса (зашифрованные учетные данные пользователя) в качестве заголовка ответа HTTP.
  3. Все последующие запросы от пользователя содержат токен сеанса вместо обычной аутентификации.

Моя текущая мысль такова: если маркер сеанса содержит зашифрованные учетные данные, то должна быть возможность манипулировать входящим сообщением, расшифровывать учетные данные и заменять заголовок сеанса заголовком обычной аутентификации. Моя проблема заключается в поиске точки расширения, которая:

  • Показывает свойства сообщения некоторым образом И
  • Выполняется - перед выполнением пользовательского UserNamePasswordValidator.

Кто-нибудь из вас, гуру, знает о такой точке расширения или способе настройки механизма безопасности транспорта? Я, честно говоря, сбит с толку огромным количеством вариантов здесь, и просмотр пространств имен System.ServiceModel в Reflector был разочаровывающим упражнением.

Спасибо!

1 Ответ

2 голосов
/ 26 августа 2010

Я нашел ответ самостоятельно, и я ответил, что не могу понять, как реализовать механизм точный , описанный в вопросе, а именно - заменить заголовок HTTP другим до проверки пароля.

Вместо этого я заменил UserNamePasswordValidator на IAuthorizationPolicy. Внутри метода Evaluate политики другой класс выполняет проверку базовых учетных данных или ключа сеанса и возвращает пользовательский IIdentity. Ключевым моментом здесь является то, что при успешной аутентификации новый список, содержащий пользовательский идентификатор, добавляется в свойство «Identities» evaulationContext, и пользовательский участник добавляется в свойство «Principal». Как только эти свойства установлены, WCF правильно передает принципал в операцию.

Это оказалось удовлетворительным решением, но я все еще разочарован тем, что не нашел точку растяжимости, которую искал.

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