2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Cloud CDN 署名付き URL を作るプログラムの Node.js 向けサンプル

Last updated at Posted at 2019-10-04

概要

https://cloud.google.com/cdn/docs/using-signed-urls?hl=ja の"署名付き URL をプログラムで作成する" のところに Node.js のサンプルプログラムがないので作ってみた。

準備

$ npm i -S urlsafe-base64
$ npm i -S crypto
$ npm i -S moment

サンプルプログラム

const URLSafeBase64 = require("urlsafe-base64")
const crypto = require("crypto")

function signUrl(url, expiration, keyName, key) {
  const decodedKey = URLSafeBase64.decode(key)

  const sep = url.indexOf("?") != -1 ? "&" : "?"
  const signingUrl = `${url}${sep}Expires=${expiration}&KeyName=${keyName}`
  const signature = crypto.createHmac("sha1", decodedKey).update(signingUrl).digest()

  const encoded = URLSafeBase64.encode(signature)
  return `${signingUrl}&Signature=${encoded}`
}

使い方例

引数 key は、この例のように BASE64 エンコードされたものです。これは Cloud DNS の URL 署名鍵で自動生成されたものを使うことができたり、自分で作ったものを使うことができます。しかし、その署名鍵は安全に保管してください。
誤ってGitHubの公開リポジトリーに公開するとか、Webで公開してしまうとかいったことがないようにしてください。

const moment = require("moment")
const url = signUrl("https://myhost/path/to/image.jpg", moment().add(1, "hours").unix(), "my-key", "YmFzZTY0ZW5jb2RlZAo=")
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?