mBaaSにアクセスする際には署名文字列を生成してリクエストヘッダーに設定する必要があります。その文字列は様々な条件によって生成されるので、プログラムからしか生成できないように思われています。しかし、生成方法さえ覚えてしまえば、コマンドラインから作ることもできます。
今回はその方法を紹介します。
下準備
アプリケーションキー、クエリストリングなどを連結
まず、下記の情報を揃えます。実際には1〜4の情報は固定になります。
- アプリケーションキー(X-NCMB-Application-Key)
- シグネチャメソッド(SignatureMethod)
- シグネチャバージョン(SignatureVersion)
- タイムスタンプ(X-NCMB-Timestamp)
- クエリストリング
つまり、以下は固定と考えても大丈夫です。並び順も次の通りです。
- SignatureMethod=HmacSHA256
- SignatureVersion=2
- X-NCMB-Application-Key=YOUR_APPLICATION_KEY
- X-NCMB-Timestamp=2013-12-02T02:44:35.452Z
クエリストリングは以下のパターンがあります。並び順は次の通りです。条件を指定しない場合は定義しなくても大丈夫です。
- count(件数を取得する場合)
- include(ポインターで取得するクラス名)
- limit(取得件数)
- order(並び順)
- skip(取得時にスキップする件数)
- where(検索条件)
whereはJSONで指定しますので、URLエンコードしなければなりません。これはnkfコマンドを使います。
$ echo '{"testKey":"testValue"}' | nkf -WwMQ | tr = % %7B%22testKey%22%3A%22testValue%22%7D
これらの情報を合わせて "&" でつなぎます。つまり、次のような文字になります。
SignatureMethod=HmacSHA256&SignatureVersion=2&X-NCMB-Application-Key=6145f91061916580c742f806bab67649d10f45920246ff459404c46f00ff3e56&X-NCMB-Timestamp=2013-12-02T02:44:35.452Z&where=%7B%22testKey%22%3A%22testValue%22%7D
署名用文字列を作る
次に署名用文字列を作ります。これは以下の情報を使います。
- HTTPメソッド(GET、POSTなど)
- FQDN(mbaas.api.nifcloud.com または script.mbaas.api.nifcloud.com)
- パス(/2013-09-01/classes/TestClass など)
- 上記の文字列
これらの情報を改行で繋ぎます。今回はこれをsig.txtとして保存しています。
GET mbaas.api.nifcloud.com /2013-09-01/classes/TestClass SignatureMethod=HmacSHA256&SignatureVersion=2&X-NCMB-Application-Key=6145f91061916580c742f806bab67649d10f45920246ff459404c46f00ff3e56&X-NCMB-Timestamp=2013-12-02T02:44:35.452Z&where=%7B%22testKey%22%3A%22testValue%22%7D
コマンドを実行する
後はOpenSSLで署名を生成します。一旦バイナリで作って、Base64エンコードします。
$ cat sig.txt | openssl dgst -sha256 -binary -hmac "YOUR_CLIENT_KEY" | base64 AltGkQgXurEV7u0qMd+87ud7BKuueldoCjaMgVc9Bes=
この署名はREST API リファレンス : シグネチャの生成方法 | ニフクラ mobile backendで例示されている文字列と同じです。
まとめ
プログラムで作ることもできますが、署名生成のアルゴリムが分かっていると応用がきくようになります。CLIであれば一つ一つの手順が確認しやすいので、正しく生成できているかどうかもすぐに分かるでしょう。