电子钱包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 格式不同

那里有测试 JsonRpc 服务器吗?

jsonrpc

golang jsonrpc 调用 java json rpc

jsonrpc2 返回远程引用

以太坊如何解除锁定账户地址 调用json rpc api