电子钱包jsonRPC认证
Posted
技术标签:
【中文标题】电子钱包jsonRPC认证【英文标题】:electrum wallet jsonRPC authentication 【发布时间】:2018-02-25 17:01:13 【问题描述】:我正在尝试使用电子 rpc,它给了我身份验证错误。我已经尝试通过 Linux bash 和 php 上的基本身份验证进行用户传递,但它们都不起作用。
在 plectrum 漏洞升级之前,我的 php 代码运行良好。我也在 bash 上尝试过 curl ,但我得到了同样的错误
Error code explanation: 401 - No permission -- see authorization schemes.
我试过了
curl --data-binary '"id":"curltext","method":"listaddresses","params":"funded":true' http://test:abc@127.0.0.1:7777
和
curl --data-binary '"id":"curltext","method":"listaddresses","params":"funded":true' http://127.0.0.1:7777
和
curl -utest http://127.0.0.1:7777
但电子服务器从不接受任何身份验证。
我也尝试过禁用 rpc 身份验证,但仍然遇到同样的错误
【问题讨论】:
【参考方案1】:您必须使用适当的 curl 参数来使用 basic authentication。
引用手册的相关部分:
6.1 基本认证
HTTP 身份验证能够告诉服务器您的用户名和密码,以便它可以验证您是否被允许执行您正在执行的请求。 HTTP 中使用的基本身份验证(这是 curl 默认使用的类型)是基于 plain text 的,这意味着它发送的用户名和密码只是稍微混淆,但仍然完全可读任何人在您和远程服务器之间的网络上嗅探。
告诉 curl 使用用户名和密码进行身份验证:
curl --user name:password http://www.example.com
因此,在终端中,您的命令应该像这样开始:
curl --user RPCusername:RPCpassword http://127.0.0.1:7777 …
并且(作为奖励)在 PHP 中,它看起来像这样:
<?php
$RPCusername = 'test';
$RPCpassword = 'abc';
$somefundedBTCaddress = '1FeexV6bAHb8ybZjqQMjJrcCrHGW9sb6uF';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $RPCusername.':'.$RPCpassword);
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:7777');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '"id":"curltext","method":"getaddressbalance","params":"address":"'.$somefundedBTCaddress.'"');
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch))
echo 'Error:'.curl_error($ch).PHP_EOL;
else
$result =json_decode($result,true);
echo($result['result']['confirmed'].PHP_EOL);
echo($result['result']['unconfirmed'].PHP_EOL);
curl_close ($ch);
exit();
【讨论】:
【参考方案2】:您还可以使用其他传递用户和密码的模式来 curl,例如:
curl --data-binary '"params": "amount": 0.0021651117760957575, "expiration": 1212, "method": "addrequest", "id": "c6cf406e-0c4b-4eb7-b3d2-1712a4d3a553"' http://user:LMt2FDyG-c543kc23H-NA==@10.78.1.1:7049
【讨论】:
以上是关于电子钱包jsonRPC认证的主要内容,如果未能解决你的问题,请参考以下文章
Jsonrpc4j 和 go 的 rpc/jsonrpc 之间的 JSONRPC 格式不同