Signature生成サンプル (bash)

Signature生成サンプル

このサンプルはAPI利用方法で示した署名(Signature)の生成方法を紹介するためのものです。

署名の生成には、bash・OpenSSL、その他UNIX commandを使用しています。

サンプルプログラムでは署名を生成するのみで、APIのリクエストは行いません。

サンプルコード

#!/bin/bash

ACTION='GetVirtualMachineStatus'
GP_SERVICECODE='gp12345678'
GC_SERVICECODE='gc12345678'
EXPIRES=`date -d '1 hours' +%FT%H%%3A%M%%3A%SZ`

CANONICALIZED_QUERY_STRING="\
APIVersion=20130901\
&AccessKeyId=$IIJAPI_ACCESS_KEY\
&Action=$ACTION\
&Expire=$EXPIRES\
&GcServiceCode=$GC_SERVICECODE\
&GpServiceCode=$GP_SERVICECODE\
&SignatureMethod=HmacSHA256\
&SignatureVersion=2"

STRING_TO_SIGN=string2sign.$$
trap "test -f '$STRING_TO_SIGN' && /bin/rm '$STRING_TO_SIGN'" 0 1 2 3 15

echo    'GET'                        > $STRING_TO_SIGN
echo    $IIJAPI_HOST	            >> $STRING_TO_SIGN
echo    $IIJAPI_PATH                >> $STRING_TO_SIGN
echo -n $CANONICALIZED_QUERY_STRING >> $STRING_TO_SIGN

SIGNATURE=`\
openssl dgst -sha256 -binary -hmac "$IIJAPI_SECRET_KEY" $STRING_TO_SIGN \
| base64 \
| sed -e 's|+|%2B|g' | sed -e 's|/|%2F|g' | sed -e 's|=|%3D|g'`

echo $SIGNATURE

exit 0

実行例

AccessKeyなどは環境変数で与えます。

※このスクリプトはあくまでサンプルです。環境変数、ShellのhistoryからAccessKey, SecretKeyが漏洩しないように十分に注意して下さい。

$ export IIJAPI_ACCESS_KEY='アクセスキー'
$ export IIJAPI_SECRET_KEY='シークレットキー'
$ export IIJAPI_HOST='gp.api.iij.jp'
$ export IIJAPI_PATH='/json'

$ ./sign.sh
Tj5PhhK0vKgrNhWpOpgUkmCGYGOEo4PsPyru5Rsqiws%3D