#1.背景
Nodeで動くシステムで、AzureのAPI Managementにアクセスする為にSASを発行したかったが、公式にはC#のサンプルしか無かった。
今時Nodeのサンプルが無いとかふざけてるよね?
で、色んな所探したけど、載ってなかったorz
っという訳で3時間ほど試行錯誤してやっとたどり着いた答えを惜しげも無く公開しよう(゚∀゚)ハァハァ
#2.コード
四の五の言わずにコードだけ。
/**
* APIManagementにアクセスする為のSASを作る
*/
protected getAPIManagementSAS(){
// この二つはnpm install 必要っす
let utf8 = require("utf8")
let crypto= require("crypto")
// キーはAzureポータルから取って来てねー(゚∀゚)
let identifier = process.env.API_IDENTIFIER;
let key = process.env.API_KEY;
var now = new Date;
// UTCの時間にします
var utcDate = new Date(now.getUTCFullYear(),now.getUTCMonth(), now.getUTCDate() , now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
// 有効期限1分でキーを作成。いい感じに時間を足して有効期限作って下さい!
// フォーマット"yyyy-MM-ddThh:mm:ss.0000000Z"
let expiry = addMinutes(utcDate,1,"yyyy-MM-ddThh:mm:ss") + '.0000000Z'
// ごにゃごにゃして、、
var dataToSign = identifier + "\n" + expiry;
var signatureUTF8 = utf8.encode(key);
var signature = crypto.createHmac('sha512', signatureUTF8).update(dataToSign).digest('base64');
var encodedToken = `SharedAccessSignature uid=${identifier}&ex=${expiry}&sn=${signature}`;
// 出来上がり・⌒ ヾ(*´ー`) ポイ
return encodedToken
}
#3.注意
キー情報があるんで、JSと言えどもフロントでやったらあきませんよーヽ(・∀・)
まぁ、需要ないだろうなー(ノ▽`)