トークン生成方法

前項で発行した APIキーとシークレットキーからAPIのリクエストヘッダキー「Authorization」に必要となるトークンを生成します。トークンの先頭に”Bearer ”を付与します。

トークンは下記3つの要素を Base64url エンコーディングし、ピリオドで結合した文字列となります。

Header {"typ":"JWT", "alg":"HS256"} algに署名に使用するアルゴリズム「HS256」を指定します。
Payload {"iat": 1516271467, "sub":"APIキー"} iatにトークン発行日時unixtime(秒数)で指定します。iat 発行日時が当社管理サーバシステム時刻と1時間以上ずれている場合、エラー処理します。
Signature HMAC-SHA256( base64urlEncoding(header) + '.' + base64urlEncoding(payload), シークレットキー) ヘッダとペイロードをBase64urlエンコーディングしてピリオドで結合したものをヘッダで指定したアルゴリズムで暗号化します。

下記にLinux、Windowsでのトークン生成例を記載します。
※ 「2. APIリファレンス」 の実行例ではトークン生成を省略しています。

Linux bash での生成例
# セルフポータルから発行したAPIキー / シークレットキー
apikey='1dae9fdbff66bf7482c8a398069616ac86f32b9141aa59f5b94a2dd5c6eb8760'
secret='89b5ee89846aeb81cc09683a81ea70a32 ...... 5e50bab11c54b98a7595901f9c85c62227603c36a8ccce6f0fdb9'
# header定義
header='{"typ":"JWT","alg":"HS256"}'
# payload生成
time=$(date -u +%s)
payload='{"iat": '$time',"sub":"'$apikey'"}'
# 署名生成
b64ue_header=$(echo -n "$header" | base64 -w0)
b64ue_payload=$(echo -n "$payload" | base64 -w0)
signature_rawout=$(echo -n "$b64ue_header.$b64ue_payload" | openssl dgst -binary -sha256 -hmac "$secret" | base64 -w0)
#先頭に“Bearer ”を付与してトークン完成
token="Bearer $b64ue_header.$b64ue_payload.$signature_rawout"
# 生成したトークン確認
echo $token
Bearer eyJ0eXAiOiJKV1 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...dDwoEOotrr/RiTaaTpwBtVvqddlgUc2H/iklo=
Windows powershell での生成例
# セルフポータルから発行したAPIキー / シークレットキー
$apikey='1dae9fdbff66bf7482c8a398069616ac86f32b9141aa59f5b94a2dd5c6eb8760'
$secret='89b5ee89846aeb81cc09683a81ea70a32 ...... 5e50bab11c54b8a7595901f9c85c62227603c36a8ccce6f0fdb9'
# header定義
$header = '{"typ":"JWT","alg":"HS256"}'
# payload生成
$time = [Int](((Get-Date)-(Get-Date("1970/1/1 0:0:0 GMT"))).TotalSeconds)
$payload = '{"iat": ' + $time + ',"sub":"' + $apikey + '"}'
# 署名生成
$b64ue_header = [Convert]::ToBase64String(([System.Text.Encoding]::Default).GetBytes($header))
$b64ue_payload = [Convert]::ToBase64String(([System.Text.Encoding]::Default).GetBytes($payload))
$oHMACSHA256 = New-Object System.Security.Cryptography.HMACSHA256
$oHMACSHA256.key = [Text.Encoding]::ASCII.GetBytes($secret)
$signature_rawout = $oHMACSHA256.ComputeHash([Text.Encoding]::ASCII.GetBytes($b64ue_header + "." + $b64ue_payload))
$b64ue_signature = [Convert]::ToBase64String($signature_rawout)
#先頭に“Bearer ”を付与してトークン完成
$token = "Bearer " + $b64ue_header + "." + $b64ue_payload + "." + $b64ue_signature
# 生成したトークン確認
echo $token
Bearer eyJ0eXAiOiJKV1 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...dDwoEOotrr/RiTaaTpwBtVvqddlgUc2H/iklo=