【问题标题】:How to provide credentials to Ankr when calling the API with Web3.js HttpProvider?使用 Web3.js HttpProvider 调用 API 时如何向 Ankr 提供凭据?
【发布时间】: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 错误响应。我认为我的凭据是正确的,因为我可以通过浏览器上的链接访问它们,但在传递标头时它们似乎不起作用。代码有什么问题或缺少什么?

【问题讨论】:

    标签: node.js authorization web3 web3js


    【解决方案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 函数(可以解码回原来的)。所以在这种情况下,凭证是编码的,而不是散列的。在您寻找更多资源时可能会很有用。
    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2015-06-24
    • 2021-07-23
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多