3

私のプロジェクトは、 scryptを使用して資格情報チェッカーを実装しようとしています。独自の資格情報とチェッカー オブジェクトを実装しようとしましたが、pb でそれらを使用するのに多くの問題がありました。

Pb はネットワーク上で MD5 ハッシュを使用するようにハードコーディングされているようですが、これは私たちの実装では絶対に機能しません。scrypt を使用しているため、サーバー側で平文の正しいパスワードを取得する方法がありません。そのため、代わりに平文で検証されるパスワードを送信する方法が必要です。資格情報チェッカーで twisted.cred.credentials.UsernamePassword を使用してみましたが、サーバーに到達していないようです。(代わりに _PortalAuthChallenger を取得します)

http://twistedmatrix.com/trac/ticket/4398のチケットは、pb でカスタム資格情報チェッカーをサポートするために PBServerFactory サブクラスが必要であることを示しているようですが、これまでのところ、何をオーバーライドするかを完全に理解できていません。別の ICredentials 実装を使用するようにします。pb に別の資格情報クラスを使用させる方法の例 (または単なるドキュメント) はありますか?

4

2 に答える 2

4

PB は、ネットワーク上で MD5 ハッシュを使用するように正確にハードコーディングされているわけではありません。これは、現在実装されている認証プロトコルにすぎません。独自の認証プロトコルを実装することで、ほぼ何でもできます。これは、PB では、いくつかの認証メソッドを呼び出すことができるオブジェクトを意味します。

を実装する独自のオブジェクトを作成しIPBRoot、 に渡しPBServerFactoryます。これは単にrootObject、特定の接続のルート オブジェクトを返すメソッドを実装する必要があることを意味します (もちろん、Zope インターフェイスでその実装を宣言します)。

実装は、 Twistedの実装と同様に をIPBRootラップする必要があります。Portal_PortalRoot

rootObject次に、アプリケーションに適した から返されたオブジェクトでリモート メソッドを作成します。のようなものかもしれませんremote_loginPlaintext。この方法では、必要に応じてユーザーを認証し、そのやり取りから派生した資格情報を使用loginして特定Portalのものを呼び出すことができ、要件に適しています (そして、明らかな理由IPerspectiveがあることを願っていますが、どのようなインターフェイスもお勧めします)。

やや柔軟性のない_PortalRoot(2 つの資格情報タイプのみをサポートし、IAnonymousIUsernamePassword) が のアダプターとして登録されているためPortal、実際よりも少し公式に見えます。それが「公式」の PB/Cred 統合メカニズムであると考えないでください。単なる「デフォルト」のメカニズムです。

他の認証タイプをサポートできるように、PB のより柔軟な認証メカニズム (おそらく完全な SASL 実装?) に貢献していただければ幸いです。アプリケーションの特定のニーズが満たされたときに、それを行うことを検討していただければ幸いです。

于 2011-03-27T03:45:41.187 に答える