1

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

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

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

我希望它按以下方式工作:

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

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

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

4)Client调用函数Auth2,传入sha(random sequence A . random sequence B . pre-shared-key)作为参数;

5)服务器将接收到的参数与自己的sha(随机序列A.随机序列B.预共享密钥)进行比较。如果接收到的参数和他的sha一样,他就给客户端发一个链接;如果不是,它会发送一个空字符串。

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

通过这种方式,我可以验证客户端和服务器,而无需直接发送密码,这与 WPA-PSK 所做的类似。

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

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

4

1 回答 1

1

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

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

于 2012-09-06T08:28:25.757 回答