使用 Web3.js HttpProvider 调用 API 时如何向 Ankr 提供凭据?
Posted
技术标签:
【中文标题】使用 Web3.js HttpProvider 调用 API 时如何向 Ankr 提供凭据?【英文标题】:How to provide credentials to Ankr when calling the API with Web3.js HttpProvider? 【发布时间】:2021-07-31 08:30:20 【问题描述】:我正在尝试访问 Ankr API 地址,类似于:
https://apis.ankr.com/XXXX/YYYY/full/main
通过浏览器访问此链接时,我可以引入我在 Ankr 面板控件上创建的凭据,并且可以成功通过。但是现在我正在尝试使用 Node 上的 Web3.js 来做到这一点:
var options =
headers: [
name: 'Authorization',
value: 'Basic myUsername:myPassword',
,],;
const web3 = new Web3(new Web3.providers.HttpProvider('https://apis.ankr.com/XXXX/YYYY/full/main', options))
我收到 401 Unauthorized 错误响应。我认为我的凭据是正确的,因为我可以通过浏览器上的链接访问它们,但在传递标头时它们似乎不起作用。代码有什么问题或缺少什么?
【问题讨论】:
【参考方案1】:您需要传递myUsername:myPassword
的base64,而不是实际的明文。
// base64 encoded
value: 'Basic ' + Buffer.from('myUsername:myPassword').toString('base64'),
请参阅MDN docs 了解更多信息。
【讨论】:
是的,这确实比我找到的 hacky 解决方案要好得多,谢谢【参考方案2】:问题是必须以某种方式对凭据进行哈希处理。
我不知道这是否是最合适的解决方案,但我最终通过访问浏览器上的地址 (https://apis.ankr.com/XXXX/YYYY/full/main) 解决了这个问题,在 Chrome 上打开了开发工具,并登录并介绍了我的凭据。
然后我通过检查我的请求的 HEADER(在 Chrome 上,这是在 Network>therequest>Request Headers>authorization 中完成的)获得了在请求中发送的散列凭据。我只是在 js 代码上复制/粘贴了这个散列凭据,它就起作用了!
【讨论】:
散列是一种单向函数(无法从散列中取回原始函数)。 Base64 是一个 encoding 函数(可以解码回原来的)。所以在这种情况下,凭证是编码的,而不是散列的。在您寻找更多资源时可能会很有用。以上是关于使用 Web3.js HttpProvider 调用 API 时如何向 Ankr 提供凭据?的主要内容,如果未能解决你的问题,请参考以下文章