Как должна быть реализована поддержка альтернативных типов учетных данных в файле twisted.pb? - PullRequest
3 голосов
/ 26 марта 2011

Мой проект пытался реализовать проверку учетных данных, используя scrypt . Мы пытались реализовать наши собственные учетные данные и объекты проверки, но у нас было много проблем с тем, чтобы заставить их использовать pb.

Pb кажется жестко запрограммированным для использования хешей MD5 по проводам, что абсолютно не сработает в нашей реализации; у нас нет способа получить правильный пароль в виде открытого текста на стороне сервера, так как мы используем scrypt, поэтому нам нужен способ передать пароль, который будет проверен в виде открытого текста. Мы пытались использовать twisted.cred.credentials.UsernamePassword с нашей проверкой учетных данных, но, похоже, она не доходит до сервера. (вместо этого мы получаем _PortalAuthChallenger)

Билет на http://twistedmatrix.com/trac/ticket/4398, похоже, указывает на то, что подкласс PBServerFactory необходим для поддержки пользовательских контроллеров учетных данных в pb, но до сих пор я был совершенно не в состоянии выяснить, что следует переопределить, чтобы сделать его использовать другую реализацию ICredentials. Есть ли примеры (или просто документация), как заставить pb использовать другой класс учетных данных?

Ответы [ 2 ]

4 голосов
/ 27 марта 2011

PB не является жестко запрограммированным для использования хешей MD5 по проводам;это просто протокол аутентификации, как он реализован в настоящее время.Вы можете делать практически все, что захотите, реализуя свой собственный протокол аутентификации - который в PB означает просто объект, для которого вы вызываете некоторые методы аутентификации.

Создайте свой собственный объект, который реализует IPBRoot,и передайте его PBServerFactory.Это просто означает, что вам нужно реализовать метод с именем rootObject, который возвращает корневой объект для определенного соединения (и, конечно, затем объявить эту реализацию с интерфейсом Zope).

Ваша реализация IPBRoot должна обернутьPortal, аналогично _PortalRoot в реализации Twisted.

Затем создайте удаленный метод для объекта, возвращенного из rootObject, подходящий для вашего приложения;может быть что-то вроде remote_loginPlaintext.В этом методе вы можете аутентифицировать пользователей так, как вы хотите, а затем вызвать login для вашего конкретного Portal с любыми учетными данными, полученными из этого взаимодействия, и иметь смысл для ваших требований (и любого интерфейса, хотя по понятным причинам, IPerspective)это то, что я бы порекомендовал).

Тот факт, что несколько негибкий _PortalRoot (который поддерживает только 2 типа учетных данных; IAnonymous и IUsernamePassword) зарегистрирован как адаптер для Portal, что делаетэто кажется немного более официальным, чем на самом деле.Не думайте, что это «официальный» механизм интеграции PB / Cred, просто «стандартный».

Было бы здорово, если бы вы могли добавить более гибкий механизм аутентификации (возможно, полную реализацию SASL).?) для PB, чтобы мы могли поддерживать другие типы аутентификации.Я надеюсь, что вы подумаете об этом, когда будут удовлетворены конкретные потребности вашего приложения.

2 голосов
/ 06 апреля 2011

Вот ссылка на предварительное исправление, которое мы придумали: http://paste.skewedaspect.com/show/20/

Обратите внимание, что для этого требуется, чтобы настраиваемые учетные данные были копируемыми, а управление обменом ключами MD5 по умолчанию контролируется ключевым словом arg useMD5Challenge.

Примечание: в нашей реализации мы полностью оставляем проверку на Checker, и наш объект Credential не содержит ничего, кроме имени пользователя и пароля, поэтому никакой серийный код не сериализуется.

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