gpt4 book ai didi

python - 应该如何实现对 twisted.pb 中备用凭证类型的支持?

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:11 24 4
gpt4 key购买 nike

我的项目一直在尝试使用 scrypt 实现凭证检查器.我们已经尝试实现我们自己的凭据和检查器对象,但我们在让 pb 使用它们时遇到了很多麻烦。

Pb 似乎硬编码为通过网络使用 MD5 哈希,这在我们的实现中绝对行不通;我们没有办法在服务器端以明文形式获取正确的密码,因为我们使用的是 scrypt,所以我们需要一种方法来传输要以明文形式验证的密码。我们已经尝试将 twisted.cred.credentials.UsernamePassword 与我们的凭据检查器一起使用,但它似乎并没有进入服务器。 (我们仍然得到 _PortalAuthChallenger)

机票在 http://twistedmatrix.com/trac/ticket/4398似乎表明需要一个 PBServerFactory 子类来支持 pb 中的自定义凭证检查器,但到目前为止我完全无法弄清楚要覆盖什么以使其使用不同的 ICredentials 实现。是否有任何示例(甚至只是文档)说明如何让 pb 使用不同的凭据类?

最佳答案

PB 并没有完全硬编码以通过网络使用 MD5 散列;这只是目前实现的身份验证协议(protocol)。您可以通过实现自己的身份验证协议(protocol)来做几乎任何您想做的事情——在 PB 中,这仅意味着您可以调用一些身份验证方法的对象。

创建您自己的实现IPBRoot 的对象,并将其传递给PBServerFactory。这只是意味着您需要实现一个名为 rootObject 的方法,该方法返回特定连接的根对象(当然,然后使用 Zope 接口(interface)声明该实现)。

您的IPBRoot 实现应该包装一个Portal,类似于Twisted 实现中的_PortalRoot

然后,对从 rootObject 返回的对象创建一个适合您的应用程序的远程方法;可能类似于 remote_loginPlaintext。在这种方法中,您可以根据需要对用户进行身份验证,然后在您的特定 Portal 上调用 login,使用从该交互中派生的任何凭据并满足您的要求(以及任何界面,尽管出于显而易见的原因,IPerspective 是我推荐的)。

有点不灵活的 _PortalRoot(仅支持 2 种凭证类型;IAnonymousIUsernamePassword)被注册为 Portal,让它看起来比实际更正式。不要认为它是“官方”PB/Cred 集成机制,只是“默认”机制。

如果您能为 PB 提供更灵活的身份验证机制(也许是完整的 SASL 实现?),这样我们就可以支持其他身份验证类型,那就太好了。我希望当您的应用程序的特定需求得到满足时,您会考虑这样做。

关于python - 应该如何实现对 twisted.pb 中备用凭证类型的支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com