在base64中使用ruby进行API调用的授权,无填充

问题描述

我正在对API进行后期调用,该API要求采用这种形式的授权标头

Authorization: "Basic " + BASE64($PUBLICKEY + ":" + HMAC_SHA256(BASE64_WITHOUT_PADDING($REQUEST_BODY),$SECRETKEY))

我尝试的代码:

require 'json'
require 'rest-client'
require 'openssl'
require 'base64'

class Search
  attr_reader :results
  def initialize
    # Base64.urlsafe_encode464(str).gsub('=','')
    public_key = ENV['PUBLICKEY']
    secret_key = ENV['SECRETKEY']
    body = '{"jsonrpc":"2.0","method":"activity.find","params":{"query":{"supplierId":"sup_ee9f3fbe-72b7-4677-8a91-a76c5325b635","activityIds":[],"cursor":null}},"id":1}'
    sha256 = OpenSSL::HMAC.digest('sha256',secret_key,Base64.urlsafe_encode64(body,padding: false)) 
    auth = Base64.strict_encode64("#{public_key}:#{sha256}")
    # perform request and assign results
    @results = RestClient.post(
      'https://api.experiencebank.io/v1','{"jsonrpc":"2.0","id":1}',{
        Accept: 'application/json',content_type: 'application/json',Authorization: "Basic #{auth}"
       }
    )
  end
end

And this is what I get back

{ "jsonrpc": "2.0","error": { "code": 400,"message": "Signature Mismatch" },"id": 1 }

我认为问题在于在base64中使用授权在无填充的情况下对正文请求进行编码。

有人可以通过授权码帮助我吗??? 该API为https://api.experiencebank.travel/

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)