KrakenプライベートAPI( https://www.kraken.com/help/api )のクライアントを実装しようとしていますが、問題が発生しているため、 cURLを使用して同じAPIにアクセスしようとしています。
しかし、私はそれを機能させることができず、ハッシュとダイジェストを生成するために適切なコマンドラインツールを使用していない可能性があると思います。
プライベートAPIにアクセスするときは、次のヘッダーをリクエストに追加する必要があります。
_API-Key = «key»
API-Sign = Message signature using HMAC-SHA512 of (URI path + SHA256(nonce + POST data)) and base64 decoded «secret»
_
コマンドラインで、次の手順を実行します。
echo -n "123nonce=123" | openssl sha256
_結果:_(stdin)= 353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d
_
echo -n "/0/private/Balance353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d" | openssl sha512 -hmac $(echo -n "wqtzZWNyZXTCuw==" | base64 -d)
結果:_(stdin)= 6f19f8f058b0e6dc835692840ccdebc1c415f00d42b75b3d3c21ef5fd43f006e30cc9b51c63aba3268a534bf68978d60d2362bffd31c8125553fb8ec41b2f64d
_
echo -n "6f19f8f058b0e6dc835692840ccdebc1c415f00d42b75b3d3c21ef5fd43f006e30cc9b51c63aba3268a534bf68978d60d2362bffd31c8125553fb8ec41b2f64d" | base64
_結果:
_NmYxOWY4ZjA1OGIwZTZkYzgzNTY5Mjg0MGNjZGViYzFjNDE1ZjAwZDQyYjc1YjNkM2MyMWVmNWZk
NDNmMDA2ZTMwY2M5YjUxYzYzYWJhMzI2OGE1MzRiZjY4OTc4ZDYwZDIzNjJiZmZkMzFjODEyNTU1
M2ZiOGVjNDFiMmY2NGQ=
_
curl -X POST -H "Accept: application/json" -H "API-Key: «key»" -H "API-Sign: NmYxOWY4ZjA1OGIwZTZkYzgzNTY5Mjg0MGNjZGViYzFjNDE1ZjAwZDQyYjc1YjNkM2MyMWVmNWZkNDNmMDA2ZTMwY2M5YjUxYzYzYWJhMzI2OGE1MzRiZjY4OTc4ZDYwZDIzNjJiZmZkMzFjODEyNTU1M2ZiOGVjNDFiMmY2NGQ=" -d "nonce=123" https://api.kraken.com/0/private/Balance
_結果(有効な"キー"と"シークレット"を想定):_{"error":["EAPI:Invalid signature"]}
_
しかし、どの順列を試しても、「無効な署名」エラーが発生し続けます。
これらの順列には、以下が含まれますが、これらに限定されません。
Meuhのおかげで私は問題を理解しました。他の人が私と同じくらいばかげていると想像できるので、私は自分の質問に答えます:
問題は、バイトの代わりに文字列を使用していることです。コマンドラインとcURLについて理解する時間がありません(おそらく他の誰かがそれをしたいと思っているので、その答えを受け入れます)。
作業中のクライアントの場合、_/0/private/Balance
_とSHA256 16進文字列_353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d
_を連結する代わりに、 "/ 0/private/Balance"(_47 48 47 112 114 105 118 97 116 101 47 66 97 108 97 110 99 101
_)とSHA256()のバイトを連結する必要があります。 "123nonce = 123")(_53 63 157 249 42 177 213 229 175 224 107 183 209 187 66 168 239 102 84 182 51 217 72 24 0 122 234 251 175 3 202 61
_)(今回は10進値として表示されます)。
SHA512HMACについても同じです。
編集:
誰かがTwitterで質問したので、コマンドラインでそれを行うための実際の手順は次のとおりです。
echo -n "/0/private/Balance" > tmp.bin
_echo -n "123nonce=123" | openssl sha256 -binary >> tmp.bin
_cat tmp.bin | openssl sha512 -binary -hmac $(echo -n "wqtzZWNyZXTCuw==" | base64 -d) | base64
( "wqtzZWNyZXTCuw =="は ""secret"" BASE64でエンコードされています。もちろん、これはyoursecret)curl -X POST -H "Accept: application/json" -H "API-Key: «key»" -H "API-Sign: «output-from-step-3»" -d "nonce=123" https://api.kraken.com/0/private/Balance
_上記のように、元の質問で忘れられていたのは、_-binary
_スイッチを使用したことです。
注:APIキーとシークレットはコマンドライン(_ps aux
_で表示)とシェル履歴に表示されます!