如何进行XMLRPC :: Client身份验证

时间:2009-08-12 11:44:33

标签: php ruby authentication xml-rpc

我需要制作一个必须经过身份验证的XMLRPC请求,并且在XMLRPC的身份验证方面找到了有限的文档。最好的方法是什么?现在我正在使用下面的代码但仍然出现身份验证失败。是否有不同的方法来指定客户端,然后调用辅助身份验证方法?

client = XMLRPC::Client.new(@xmlrpc_url, "/xmlrpc.php", "443", nil, nil, @username, @password, true, 900)

2 个答案:

答案 0 :(得分:1)

  

...我正在使用下面的代码,但仍然会出现身份验证失败

仔细检查远程网络服务器是否接受资源/xmlrpc.php的HTTP基本身份验证,并进一步接受您的@username@password

根据docs,您的XML client.call("bwizzy")的XMLRPC咒语会生成基本身份验证的内容,如下所示:

POST /xmlrpc.php HTTP/1.1
User-Agent: XMLRPC::Client (Ruby 1.9.1)
Content-Type: text/xml; charset=utf-8
Content-Length: 88
Connection: keep-alive
Authorization: Basic c3RhY2s6b3ZlcmZsb3c=
Accept: */*
Host: localhost

<?xml version="1.0"><methodCall><methodName>bwizzy</methodName></params></methodCall>

(请不要向我抱怨这些标题的顺序 - 这就是我在电线上看到的内容!:))

现在,XML-RPC本身并不提供身份验证,因此您有一些常规选项:

  1. 使用典型的“网络身份验证”技术
    HTTP授权方案,就像您当前使用的那样。可信的客户端证书。 Cookie身份验证令牌。等
    然而,典型的web身份验证技术具有共同的风险。在这里寻找更多指导。

  2. 扩展RPC功能以支持用户定义的身份验证 例如,RPC调用bwizzy可能会使用用户名和密码作为参数 或者登录RPC函数可能会生成一个时间限制令牌以用作Cookie 这种方法是侵入性的 - 现在你的RPC调用必须是auth-aware - 并且容易出错 - 现在你必须自己实现auth。

  3. 扩展XML-RPC本身
    XML RPC调用可以自己签名或签名和加密,例如,ala SOAP的digital signatures

答案 1 :(得分:0)

展望IXR http://scripts.incutio.com/xmlrpc/basic-server-construction.php,它展示了如何进行基本身份验证,但看起来不太安全