我正在创建一个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调用之间保持会话?
答案 0 :(得分:1)
我首先想到的是,当您执行Auth1时,服务器会发送会话cookie,并且由于您在会话中存储数据,因此需要cookie。 当您执行Auth2时,您不会发送会话cookie,因此服务器会创建一个新会话并且您的数据会丢失。
我可能错了,因为我不知道您使用的客户端是否会自动执行此操作。