我需要发出一个必须进行身份验证的XMLRPC请求,并且在XMLRPC的身份验证方面找到了有限的文档。最好的方法是什么?现在我正在使用下面的代码,但仍然得到一个身份验证失败。是否有其他方法来指定客户端,然后调用辅助身份验证方法?
client = XMLRPC::Client.new(@xmlrpc_url, "/xmlrpc.php", "443", nil, nil, @username, @password, true, 900)
gupuwyp21#
仔细检查远程Web服务器是否接受资源/xmlrpc.php的HTTP基本身份验证,以及它是否进一步接受您的@username和@password。根据docs,您对RPC client.call("bwizzy")的XMLRPC咒语将使用基本身份验证生成如下内容:
/xmlrpc.php
@username
@password
client.call("bwizzy")
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.使用典型的“Web身份验证”技术HTTP授权方案,就像你现在使用的。可信的客户端证书。Cookie身份验证令牌。等等。然而,典型的网络认证技术都有共同的风险。1.扩展RPC函数以支持用户定义的身份验证例如,RPC调用bwizzy可能将用户名和密码作为参数。或者,登录RPC函数可能生成一个有时间限制的令牌,用作Cookie。这种方法是侵入性的--现在您的RPC调用必须支持身份验证--并且容易出错--现在您必须自己实现身份验证。1.扩展XML-RPC本身XMLRPC调用本身可以被签名或签名并加密,例如,alaSOAP的digital signatures
bwizzy
ffscu2ro2#
查看IXR http://scripts.incutio.com/xmlrpc/basic-server-construction.php,它显示了如何执行基本身份验证,但看起来不是很安全
2条答案
按热度按时间gupuwyp21#
仔细检查远程Web服务器是否接受资源
/xmlrpc.php
的HTTP基本身份验证,以及它是否进一步接受您的@username
和@password
。根据docs,您对RPC
client.call("bwizzy")
的XMLRPC咒语将使用基本身份验证生成如下内容:(请不要向我抱怨这些标题的顺序--这就是我在电线上看到的!:)
现在,XML-RPC本身不提供身份验证,因此您有几个常规选项:
1.使用典型的“Web身份验证”技术
HTTP授权方案,就像你现在使用的。可信的客户端证书。Cookie身份验证令牌。等等。
然而,典型的网络认证技术都有共同的风险。
1.扩展RPC函数以支持用户定义的身份验证
例如,RPC调用
bwizzy
可能将用户名和密码作为参数。或者,登录RPC函数可能生成一个有时间限制的令牌,用作Cookie。
这种方法是侵入性的--现在您的RPC调用必须支持身份验证--并且容易出错--现在您必须自己实现身份验证。
1.扩展XML-RPC本身
XMLRPC调用本身可以被签名或签名并加密,例如,alaSOAP的digital signatures
ffscu2ro2#
查看IXR http://scripts.incutio.com/xmlrpc/basic-server-construction.php,它显示了如何执行基本身份验证,但看起来不是很安全