2012-09-05 89 views
1

我正在創建一個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調用之間保持會話?

回答

1

我的第一個想法是,當你做Auth1時,服務器發送一個會話cookie,並且由於你正在會話中存儲數據,所以需要cookie。 當您進行Auth2時,您不會發送會話cookie,因此服務器會創建一個新會話並且您的數據會丟失。

我可能是錯的,因爲我不知道您使用的客戶端是否自動執行此操作。

+0

你是對的,它必須與餅乾。看起來XML-RPC不支持cookies,所以我轉而使用SOAP,並能夠使其工作。 – Kovags