我正在创建一个 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 调用之间保持会话?