【问题标题】:stateful xml-rpc service / php有状态的 xml-rpc 服务 / php
【发布时间】:2012-09-05 23:09:13
【问题描述】:

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

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

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

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

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

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

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

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

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

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

通过这种方式,我可以在不发送明文密码的情况下验证客户端和服务器,类似于 WPA-PSK 所做的。

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

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

【问题讨论】:

    标签: php codeigniter session xml-rpc


    【解决方案1】:

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

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

    【讨论】:

    • 你是对的,它与cookies有关。 XML-RPC 似乎不支持 cookie,所以我转而使用 SOAP 并且能够让它工作。
    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 2010-12-07
    • 2013-09-12
    • 1970-01-01
    • 2011-04-23
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多