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, чтобы мы могли поддерживать другие типы аутентификации.Я надеюсь, что вы подумаете об этом, когда будут удовлетворены конкретные потребности вашего приложения.