我需要发出一个必须经过身份验证的 XMLRPC 请求,并且发现了有关 XMLRPC 身份验证方面的有限文档。解决这个问题的最佳方法是什么?现在我正在使用下面的代码,但仍然出现身份验证失败。是否有不同的方式来指定客户端,然后调用辅助身份验证方法?
client = XMLRPC::Client.new(@xmlrpc_url, "/xmlrpc.php", "443", nil, nil, @username, @password, true, 900)
...我正在使用下面的代码,但仍然出现身份验证失败
仔细检查远程网络服务器是否接受资源的 HTTP 基本身份验证
/xmlrpc.php
,并且它进一步接受您的 @username
和 @password
。
根据 docs,您的 RPC 的 XMLRPC 咒语
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 本身不提供身份验证,因此您有一些常规选项:
使用典型的“网络身份验证”技术
HTTP 授权方案,就像您当前正在使用的那样。受信任的客户端证书。 Cookie 身份验证令牌。等等
然而,典型的网络身份验证技术存在常见的风险。在这里查看更多指导。
扩展RPC功能支持用户自定义鉴权
例如,RPC 调用
bwizzy
可能会将用户名和密码作为参数。扩展 XML-RPC 本身
XML RPC 调用可以自行签名或签名并加密,例如 SOAP 的数字签名
查看 IXR http://scripts.incutio.com/xmlrpc/basic-server-construction.php 它展示了如何进行基本身份验证,但看起来不太安全