2009-08-12 166 views
2

我需要进行必须进行身份验证的XMLRPC请求,并且在XMLRPC的身份验证方面找到有限的文档。什么是最好的方式去做这件事?现在我正在使用下面的代码,但仍然得到认证失败。有没有不同的方式来指定客户端,然后调用辅助认证方法?如何XMLRPC ::客户端身份验证

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

在这方面的任何进展?希望做同样的事情 – 2010-11-09 18:29:20

回答

1

...我用下面的代码,但仍然得到验证失败

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

docs,一个RPC 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身份验证令牌。等。
    但是,典型的网络认证技术会带来常见的风险。在这里寻找更多的指导。

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

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