1

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

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

2 回答 2

0

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

于 2010-11-15T19:21:06.357 回答
0

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

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

根据文档,您对 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 本身不提供身份验证,因此您有一些通用选项:

  1. 使用典型的“网络身份验证”技术
    HTTP 授权方案,就像您当前使用的一样。受信任的客户端证书。Cookie 身份验证令牌。等等
    。然而,典型的 Web 身份验证技术具有常见的风险。戳这里以获得更多指导。

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

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

于 2009-09-03T04:42:49.037 回答