簡體   English   中英

適用於具有或不具有XMLRPC的多個客戶端的Python Server

[英]Python Server for multiple clients with or without XMLRPC

我用python創建了一組XMLRPC客戶端-服務器程序,並設置了一些用於驗證客戶端身份的方法。 但是,在完成全部編碼之后,我意識到,一旦對客戶端進行身份驗證,我為其設置的標志就是我的類中的全局標志,即,只要對一個客戶端進行身份驗證,所有客戶端都將被身份驗證。 我不知道為什么,但是我的印象是,每當客戶端連接SimpleXMLRPCServer時,它將在程序中創建一組新的變量。

基本上,現在的設置方式是

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()

我需要一種方法將其破解為我要尋找的內容(即,需要為每個連接的客戶端設置身份驗證標志),或者需要另一種協議可以更輕松地完成此操作。 經過一番搜索之后,我一直在尋找扭曲的東西,但是既然已經寫好了,我寧願對其進行修改,而不必重寫它。 我知道,現在我總是可以從客戶端獲取用戶名和密碼,但是在大量資源(必須對每個請求進行身份驗證)和節省帶寬(某些客戶端數量非常有限)的情況下,而不是那樣做。

另外,這是我第一次嘗試保護類似的東西(並且我沒有接受過互聯網安全方面的培訓),因此,如果我在邏輯中忽略了一些明顯的錯誤,請告訴我。 基本上,我不能讓別人在“ other_actions”中向我發送假變量

這樣的事情會起作用:

class SomeClass(object):
    authenticated = {}
    def authenticate(self, username, password):
        #do something here
        if authenticate(username, password):
            # make unique token can probably be just a hash
            # of the millisecond time and the username
            self.authenticated[make_unique_token(username)] = True
    def other_action(self, vars):
        # This will return True if the user is authenticated
        # and None otherwise, which evaluates to False
        if authenticated.get(vars.get('authentication-token')):
            #do whatever
            pass
        else:
            return "Not authorized."

server=SimpleXMLRPCServer.SimpleXMLRPCServer("0.0.0.0", 8000)
server.register_instance(someclass())
server.serve_forever()

他們登錄后,只需向他們傳遞身份驗證令牌即可。

我假設您知道您實際上不能使用pass作為變量名。 請記住要接受對您問題的回答(我注意到您最近幾次都沒有)。

你必須決定。 如果您確實要為所有客戶端使用一個實例,則必須將“已認證”狀態存儲在其他位置。 我對SimpleXMLRPCServer()並不熟悉,但是如果您可以在某個地方(至少是它的源地址)獲得連接對象,則可以建立一個set(),在其中注冊所有經過身份驗證的客戶端/連接/所有對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM