有状态的xml-rpc服务/ php

时间:2012-09-05 23:09:14

标签: php codeigniter session xml-rpc

我正在创建一个XML-RPC客户端和服务器,它将使用预共享密钥机制来维护客户端和服务器之间的信任;客户端和服务器都是用PHP编写的Web应用程序,它通过HTTP协议进行通信。 更具体地说,客户端是Moodle插件,服务器是我们的学校资源管理系统。

如果身份验证成功,服务器将生成并返回一个临时链接,允许最终用户从moodle登录我们的资源管理系统,绕过我们的应用程序身份验证机制,这样用户就不必输入他的凭据两次。

客户端需要在此过程中调用两个不同的函数(Auth1和Auth2),如果验证成功,客户端将返回一个特殊链接,允许moodle用户通过Moodle登录我们的学校管理系统。

我希望它的工作方式如下:

  

1)客户端和服务器都必须知道相同的密码;

     

2)Client(Moodle插件)调用服务器上的Auth1函数   并作为参数传递随机序列A 的字母数字   和他正在请求链接的用户名;

     

3)服务器创建会话,生成随机序列B   字母数字,将其发送到客户端并存储   用户名,会话变量中的随机序列A和B:

     

4)客户端调用函数Auth2并传递sha(随机序列A   。随机序列B. pre-shared-key)作为参数;

     

5)服务器将接收到的参数与自己的参数进行比较   sha(随机序列A.随机序列B.pre-shared-key)。如果   收到的参数与他的sha相同,他发送一个链接   客户;如果不是,则发送一个空字符串。

我可以成功调用函数Auth1,但是当我调用函数Auth2时,我注意到服务器没有收到会话。

通过这种方式,我可以在不发送密码短语的情况下对客户端和服务器进行身份验证,类似于WPA-PSK所做的那样。

我在客户端使用ripcord,在服务器中使用codeigniter的xmlrpc库。

如何在XML-RPC调用之间保持会话?

1 个答案:

答案 0 :(得分:1)

我首先想到的是,当您执行Auth1时,服务器会发送会话cookie,并且由于您在会话中存储数据,因此需要cookie。 当您执行Auth2时,您不会发送会话cookie,因此服务器会创建一个新会话并且您的数据会丢失。

我可能错了,因为我不知道您使用的客户端是否会自动执行此操作。