cloudstack-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Phillip Kent <phillip.k...@xmlsoup.com>
Subject Re: API Signing Issue
Date Tue, 31 Mar 2015 07:52:21 GMT
Hi Blake,

Signing requires this ordering:
  convert to lower case
  sort on the parameter keys

I think your code is doing the other way around?

Phillip

---------- Forwarded message ----------
From: Blake Ferkingstad <bferkingstad@acentek.net>
To: "users@cloudstack.apache.org" <users@cloudstack.apache.org>
Cc:
Date: Mon, 30 Mar 2015 15:17:23 +0000
Subject: API Signing Issue
Hello everyone,



I have a question on my API Signing code. The code below I have tested on
commands like createDomain, listTemplates, and listServices. Those all run
like expected, but I am running into trouble with createAccount.



function cloudstack_sign_sort($cmd)

{

  $commands = explode('&', $cmd);

  sort($commands);

  $sort = implode('&', $commands);



  return $sort;

}



function cloudstack_formatCmd($api, $cmd) {

  $str = 'apiKey=' . $api . '&' . $cmd;

  $str = strtolower(cloudstack_sign_sort($str));



  return $str;

}



function cloudstack_encrypt($cmd, $secret) {

  $hash = hash_hmac('sha1', $cmd, $secret, true);

  $hash = base64_encode($hash);



  return urlencode($hash);

}



function cloudstack_formattedUrl($baseUrl, $api, $cmd, $signature) {

  $url = $baseUrl . '?' . $cmd . '&apiKey=' . $api . '&signature=' .
$signature;



  return $url;

}



function cloudstack_sign($command, $api, $secret, $baseUrl) {

    $clean_command = substr($command, strpos($command, '?'));



    $newCmd = cloudstack_formatCmd($api, $clean_command);

    $signature = cloudstack_encrypt($newCmd, $secret);

    $url = cloudstack_formattedUrl($baseUrl, $api, $clean_command,
$signature);



    return $url;

}



When I run the command it returns for createAccount I get 'Error: 401unable
to verify user credentials and/or request signature'.



Is there something wrong with my code?



Thanks,

Blake Ferkingstad

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message