Signature生成サンプル (PowerShell)
Signature生成サンプル
このサンプルはAPI利用方法で示した署名(Signature)の生成方法を紹介するためのものです。
PowerShell v3 以降にて動作を確認しております。
サンプルプログラムでは署名を生成するのみで、APIのリクエストは行いません。
サンプルコード
1 | $IIJAPI_EXPIRE=(Get-Date).ToUniversalTime().AddHours(1).ToString("yyyy-MM-ddTHH:mm:ssZ") |
2 | $IIJAPI_SECRET_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" |
3 | $IIJAPI_ACCESS_KEY="XXXXXXXXXXXXXXXXXXXX" |
4 | |
5 | $METHOD="GET" |
6 | $API="contract" |
7 | $APIVERSION="20140602" |
8 | $SERVICECODE="cac12345678" |
9 | |
10 | if ($METHOD -eq "GET") { |
11 | $TYPE = "" |
12 | } else { |
13 | $TYPE = "application/json" |
14 | } |
15 | |
16 | $string_to_sign = |
17 | $METHOD + "`n" + |
18 | "" + "`n" + |
19 | $TYPE + "`n" + |
20 | ("x-iijapi-expire:" + $IIJAPI_EXPIRE) + "`n" + |
21 | "x-iijapi-signaturemethod:HmacSHA256" + "`n" + |
22 | "x-iijapi-signatureversion:2" + "`n" + |
23 | ("/r/" + $APIVERSION + "/" + $SERVICECODE + "/" + $API + ".json") |
24 | |
25 | $hmacsha = New-Object System.Security.Cryptography.HMACSHA256 |
26 | $hmacsha.key = [Text.Encoding]::ASCII.GetBytes($IIJAPI_SECRET_KEY) |
27 | $signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($string_to_sign)) |
28 | $signature = [Convert]::ToBase64String($signature) |
29 | |
30 | echo $signature |
Signature生成サンプル 実行例
SecretKey、API有効期限を環境変数で与えます。
AccessKeyはAPIリクエスト実行時に使用します。
※このスクリプトはあくまでサンプルです。環境変数、PowerShellのhistoryからAccessKey, SecretKeyが漏洩しないように十分に注意して下さい。
※PowerShell 上でスクリプトを実行させる場合、環境設定の変更が必要になる場合があります。
1 | PS C:\Users\user> .\sign.ps1 |
2 | blYqEogt4XNvvtTBvqNqPr96yRI/PxiJ4yZRRIOK76Q= |
3 | PS C:\Users\user> |
APIリクエスト 実行例
生成したSignatureを使用してAPIを実行するサンプルです。
前項のサンプルコードと組み合わせて利用できます。
GET contract
$IIJAPI_REQUEST_HEADERS = @{ |
"x-iijapi-Expire"=$IIJAPI_EXPIRE; |
"x-iijapi-SignatureMethod"="HmacSHA256"; |
"x-iijapi-SignatureVersion"="2"; |
"Authorization"="IIJAPI " + $IIJAPI_ACCESS_KEY + ":" + $signature |
} |
try { |
$response = Invoke-WebRequest -Method Get -Headers $IIJAPI_REQUEST_HEADERS https://cac.api.iij.jp/r/20140602/cac12345678/contract.json |
#Write-Output $response.StatusCode |
#Write-Output $response.Headers |
Write-Output $response.Content |
} catch [System.Net.WebException] { |
Write-Output $_ |
} |
実行結果
{"Result":{"RequestId":"xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx","ServiceCode":"cac12345678","PublicFqdn":"www.cac-example.iijgio.jp","CNAME":"xxxxxxxxxx.cas.iijgio.jp","Https":"off","DdoS":"off","Constructions":"on","OriginAccessType":"host","Origin":["origin.cac-example.iijgio.jp"],"OriginSendPublicFqdn":"off","NextOriginAccessType":"host","NextOrigin":["origin.cac-example.iijgio.jp"],"NextOriginSendPublicFqdn":"off","CreatedAt":"2014/02/18"}} |
PUT origin
$IIJAPI_REQUEST_HEADERS = @{ |
"x-iijapi-Expire"=$IIJAPI_EXPIRE; |
"x-iijapi-SignatureMethod"="HmacSHA256"; |
"x-iijapi-SignatureVersion"="2"; |
"Authorization"="IIJAPI " + $IIJAPI_ACCESS_KEY + ":" + $signature |
} |
$body = @' |
{"OriginAccessType":"ip","OriginIPList":["198.51.100.1"]} |
'@ |
try { |
$response = Invoke-WebRequest -Method Put -Headers $IIJAPI_REQUEST_HEADERS -ContentType "application/json" -Body $body https://cac.api.iij.jp/r/20140602/cac12345678/origin.json |
#Write-Output $response.StatusCode |
#Write-Output $response.Headers |
Write-Output $response.Content |
} catch [System.Net.WebException] { |
Write-Output $_ |
} |
実行結果
{"Result":{"RequestId":"xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx","ServiceCode":"cac12345678","OriginAccessType":"ip","Origin":["198.51.100.1"],"OriginSendPublicFqdn": |
"on","NextOriginAccessType":"ip","NextOrigin": |
["198.51.100.1"],"NextOriginSendPublicFqdn":"on"}} |
POST accesslog_key
$IIJAPI_REQUEST_HEADERS = @{ |
"x-iijapi-Expire"=$IIJAPI_EXPIRE; |
"x-iijapi-SignatureMethod"="HmacSHA256"; |
"x-iijapi-SignatureVersion"="2"; |
"Authorization"="IIJAPI " + $IIJAPI_ACCESS_KEY + ":" + $signature |
} |
$body = @' |
{"BasicAuth":"on"} |
'@ |
try { |
$response = Invoke-WebRequest -Method Post -Headers $IIJAPI_REQUEST_HEADERS -ContentType "application/json" -Body $body https://cac.api.iij.jp/r/20140602/cac12345678/accesslog_key.json |
#Write-Output $response.StatusCode |
#Write-Output $response.Headers |
Write-Output $response.Content |
} catch [System.Net.WebException] { |
Write-Output $_ |
} |
実行結果
{"Result":{"RequestId":"xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx","ServiceCode":"cac12345678","DownloadUrl":"https://help.cas.iijgio.jp/downloads/cac12345678/access_logs","DownloadKey":"wv1msg9yexdivicsxnbx0phrnhg","Expire":"2014-06-10 13:41:01","MaxNum":"20","User":"cac12345678","Password":"-McMSAxEjYOnxA"}} |
次のURLでアクセスログ(gzip形式)をダウンロードできます。
https://help.cas.iijgio.jp/downloads/cac12345678/access_logs?log_date=2014-06-09&download_key=wv1msg9yexdivicsxnbx0phrnhg&urlscheme=http |