我從多線程Java應用程序調用VTiger(6.4)webservices。每次我需要調用Web服務時,我都會先從VT獲取Challenge Token,然後登錄並最終執行我的Query。Challenge Token在Vtiger Web Services中的真正用途是什麼?
在回顧VT Web Services代碼時,似乎上述內容不是「線程安全的」,因爲一個線程獲得的令牌將被第二個線程中獲取的令牌覆蓋在VT數據庫中。如果Java應用程序恰巧在VT登錄Web服務被調用時顛倒了線程的執行順序,那麼這些調用中的一個會失敗,因爲具有錯誤的標記。
我意識到,我可以我的應用程序中緩存令牌......但這意味着實現共享存儲的互斥鎖等
所以,我的問題是:是否挑戰令牌遠安真的添加到好vtiger的網頁服務?或者,它可以被繞過嗎?
謝謝魯本。這很有幫助。我們希望使用VTiger作爲標識提供程序,在幾個應用程序(基於Java的Web應用程序和wordpress支持站點)上實施SSO。特別是Java應用程序可以跨多個服務器進行擴展。所以,建立會話單例不是非常直截了當。 – MSquared
聽起來很複雜。至於安全性,我不確定刪除令牌會不太安全。聽聽你最終如何解決這個問題會很有趣。 –
現在,我會'按原樣'使用它,因爲實際碰撞的機率很低。作爲一個長期的解決方案:將我的Web服務切換到'preLogin',以便它不需要執行挑戰/登錄。然後,類似於Amazon S3所做的:添加'expires time'值作爲附加請求參數。使用hmac和AccessKey簽署請求的全部內容。發送符號和請求。在服務器上,使用AccessKey重新計算符號。如果符號正確(請求未被篡改)並且過期時間尚未到達,請執行該請求。也使它不那麼「健談」 – MSquared