Как создать хеш строки запроса с параметрами запроса - PullRequest
0 голосов
/ 08 ноября 2018

Я отправляю запросы API в JIRA с использованием аутентификации токена JWT. Я добавил метод (get, post и т. Д.) И конечную точку в кодировку SHA256. Это успешно:

qsh = Digest::SHA256.hexdigest("GET&#{endpoint}&")
jwt = JWT.encode({
                     qsh: qsh,
                     iat: issued_at,
                     exp: expires_at,
                     iss: key
                   }, secret)

Однако я не могу добавить параметры запроса в URI. Если я добавлю параметры запроса:

qsh = Digest::SHA256.hexdigest("GET&#{endpoint}&start=50&limit=50")
jwt = JWT.encode({
                     qsh: qsh,
                     iat: issued_at,
                     exp: expires_at,
                     iss: key
                   }, secret)

Я получаю несанкционированный ответ 401.

MVP:

jira_request(:get,"/rest/servicedeskapi/servicedesk/#{serviceDeskId}/organization", nil)
def jira_request(method, endpoint, data)
    request = Typhoeus::Request.new(jira_rest_api_url(method, endpoint),
                                    followlocation: true, method: method,
                                    body: data ? data.to_json : nil,
                                    headers: { 'X-ExperimentalApi' => 'opt-in',
                                               'Content-Type' => 'application/json' })

request.on_complete do |response|
  if response.success? && !response.body.blank?
    return JSON.parse(response.body)
  elsif response.code == 204
    return true
  else
    return false
  end
end
request.run


end

  # Creating JWT token to Auth for each request
  def jira_rest_api_url(method, endpoint)
    # Gets the ADDON details for generating JWT token
    jwt_auth = MyJToken.first

issued_at = Time.now.utc.to_i
expires_at = issued_at + 500

qsh = Digest::SHA256.hexdigest("#{method.to_s.upcase}&#{endpoint}&")

jwt = JWT.encode({   qsh: qsh,
                     iat: issued_at,
                     exp: expires_at,
                     iss: jwt_auth.key
                   }, jwt_auth.secret)

# return the service call URL with the JWT token added
  "#{jwt_auth.api_base_url}#{endpoint}?jwt=#{jwt}"
end
  end

1 Ответ

0 голосов
/ 26 ноября 2018

Параметры, которые хэшируются в:

qsh = Digest::SHA256.hexdigest("GET&#{endpoint}&limit=50&start=50")

должны быть добавлены в URL запроса:

"#{jwt_auth.api_base_url}#{endpoint}?jwt=#{jwt}&start=50&limit=50"
...