我正在創建一個XML-RPC客戶端和服務器,它將使用預共享密鑰機制來維護客戶端與服務器之間的信任關係;客戶端和服務器都是用PHP編寫的Web應用程序,通過HTTP協議進行通信。 更具體的說,客戶端是Moodle插件,服務器是我們的學校資源管理系統。stateful xml-rpc service/php
如果驗證成功,服務器將生成並返回一個臨時鏈接,允許最終用戶從moodle登錄到我們的資源管理系統,繞過我們的應用程序驗證機制,因此用戶不必輸入他的憑證兩次。
客戶端需要在這個過程中調用兩個不同的函數(Auth1和Auth2),如果認證成功,客戶端將返回一個特殊的鏈接,允許moodle用戶通過Moodle登錄我們的學校管理系統。
我希望它爲以下工作:
1)客戶端和服務器必須知道同一密碼;
2)客戶端(Moodle的插件)調用服務器上 功能Auth1和作爲參數傳遞一個隨機序列的字母數字數位 甲和用戶名他正在請求鏈路;
3)服務器創建一個會話,產生一個隨機序列B的 字母數字位數,將其發送到客戶端,並在會話變量同時存儲 用戶名,隨機序列A和B:
4)客戶端調用函數Auth2並通過sha(隨機序列A 。隨機序列B。預共享密鑰)作爲參數; 5)服務器比較接收到的參數和他自己的參數(隨機序列A,隨機序列B,預共享密鑰)。如果收到的 參數與他的sha相同,他會向 客戶端發送鏈接;如果不是,它會發送一個空字符串。
我可以成功調用函數Auth1,但是當我調用函數Auth2時,我注意到服務器沒有接收到會話。
通過這種方式,我可以驗證客戶端和服務器,而無需發送密碼,與使用WPA-PSK完成的操作類似。
我在客戶端使用ripcord,在服務器端使用codeigniter的xmlrpc庫。
如何在XML-RPC調用之間保持會話?
你是對的,它必須與餅乾。看起來XML-RPC不支持cookies,所以我轉而使用SOAP,並能夠使其工作。 – Kovags