私はPythonでXMLRPCクライアントサーバープログラムのセットを作り、クライアントを認証するための少しの方法を設定しました。しかし、ほとんどすべてをコーディングした後、クライアントが認証されると、私が設定したフラッグは、クラス内でグローバルであることに気付きました。つまり、1つのクライアントが認証される限り、すべてのクライアントが認証されます。理由は分かりませんが、SimpleXMLRPCServerがクライアントによって接続されるたびに、自分のプログラムに新しい変数セットが作成されるという印象を受けました。XMLRPCの有無にかかわらず複数のクライアント用のPythonサーバー
は、基本的にそれが今セットアップされた方法は、
class someclass:
authenticate(self, username, pass):
#do something here
if(check_for_authentication(username, pass))
self.authenticated=True
other_action(self, vars):
if authenticated:
#do whatever
else:
return "Not authorized."
server=SimpleXMLRPCServer.SimpleXMLRPCServer("0.0.0.0", 8000)
server.register_instance(someclass())
server.serve_forever()
は私が(接続するクライアントごとに設定する必要がありますすなわち、認証フラグ)私は何を探していますにこれをハックする方法のいずれかが必要である、またはこれをより簡単に行うことができる別のプロトコルです。いくつかの検索の後、私はツイストを見てきましたが、これは既に書かれているので、書き直すよりもむしろ変更したいと思います。私は今のところ、クライアントからのユーザ名とパスワードを常に得ることができますが、(要求ごとに認証する)リソースと(クライアントの中には非常に限られた数量の)帯域幅を保存するという点では、むしろそれをしないでください。
また、私はこのようなものを安全にしようとしています(インターネットセキュリティで訓練されていません)ので、私のロジックでいくつかの目障りなエラーが見落とされている場合は教えてください。基本的に、私は私にこのような
ここで行ったやり方では、認証された変数はインスタンスメソッド内で 'authenticated'を宣言/使用するだけで、クラスではなくインスタンスに対してローカルになります。そうでない場合は、認証されたものがインスタンスではなくクラスに属することを示すためにコードを更新する必要があります。 – agf
私はそれをちょっと変えましたが、変数をインスタンスに属させたくありませんか?私が今問題を抱えているのは、サーバーに接続するたびにオブジェクトの新しいインスタンスを作成していないということです。あるいは、それぞれの呼び出しに対して独自の認証された変数を使用して新しいスレッドを作成することもできます。 –
ああ、私は見て、今答える。 – agf