2017-06-03 81 views
0

我從多線程Java應用程序調用VTiger(6.4)webservices。每次我需要調用Web服務時,我都會先從VT獲取Challenge Token,然後登錄並最終執行我的Query。Challenge Token在Vtiger Web Services中的真正用途是什麼?

在回顧VT Web Services代碼時,似乎上述內容不是「線程安全的」,因爲一個線程獲得的令牌將被第二個線程中獲取的令牌覆蓋在VT數據庫中。如果Java應用程序恰巧在VT登錄Web服務被調用時顛倒了線程的執行順序,那麼這些調用中的一個會失敗,因爲具有錯誤的標記。

我意識到,我可以我的應用程序中緩存令牌......但這意味着實現共享存儲的互斥鎖等

所以,我的問題是:是否挑戰令牌遠安真的添加到好vtiger的網頁服務?或者,它可以被繞過嗎?

回答

1

該令牌可防止您的會話被盜。該令牌的另一種選擇是在每次調用中使用您的accessKey,但Vtiger Webservices不是以這種方式構建的。

如果修改vtiger的基本代碼中的驗證代碼,它當然可以被忽略。至少你需要修改兩個文件

vtiger_root/include/Webservices/AuthToken.php 

vtiger_root/include/Webservices/Login.php 

我想你應該分享跨線程一個令牌。也許使用單例來實現會話建立。

+0

謝謝魯本。這很有幫助。我們希望使用VTiger作爲標識提供程序,在幾個應用程序(基於Java的Web應用程序和wordpress支持站點)上實施SSO。特別是Java應用程序可以跨多個服務器進行擴展。所以,建立會話單例不是非常直截了當。 – MSquared

+0

聽起來很複雜。至於安全性,我不確定刪除令牌會不太安全。聽聽你最終如何解決這個問題會很有趣。 –

+0

現在,我會'按原樣'使用它,因爲實際碰撞的機率很低。作爲一個長期的解決方案:將我的Web服務切換到'preLogin',以便它不需要執行挑戰/登錄。然後,類似於Amazon S3所做的:添加'expires time'值作爲附加請求參數。使用hmac和AccessKey簽署請求的全部內容。發送符號和請求。在服務器上,使用AccessKey重新計算符號。如果符號正確(請求未被篡改)並且過期時間尚未到達,請執行該請求。也使它不那麼「健談」 – MSquared