如何进行 XMLRPC::客户端身份验证

问题描述 投票:0回答:2

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

client = XMLRPC::Client.new(@xmlrpc_url, "/xmlrpc.php", "443", nil, nil, @username, @password, true, 900)
php ruby authentication xml-rpc
2个回答
0
投票

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

仔细检查远程网络服务器是否接受资源的 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 本身不提供身份验证,因此您有一些常规选项:

  1. 使用典型的“网络身份验证”技术
    HTTP 授权方案,就像您当前正在使用的那样。受信任的客户端证书。 Cookie 身份验证令牌。等等
    然而,典型的网络身份验证技术存在常见的风险。在这里查看更多指导。

  2. 扩展RPC功能支持用户自定义鉴权
    例如,RPC 调用

    bwizzy
    可能会将用户名和密码作为参数。
    或者登录 RPC 函数可能会生成一个有时间限制的令牌来用作 Cookie。
    这种方法是侵入性的——现在你的 RPC 调用必须能够感知身份验证——并且容易出错——现在你必须自己实现身份验证。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.