以前にも署名をサーバで行えばニフティクラウド mobile backendをWebアプリでも使えますにて行ったネタですが。当時はJavaScript SDKが1.2系でしたので、今回は2系に対応させました。
JavaScript SDKの署名処理をサーバサイドで行うのはRust/WebAssemblyによるNCMBの署名処理ができましたと同じくクライアントキーの隠蔽化が主な目的になります。これによって、Webアプリケーションにおいても安全にmBaaSを利用できます。WebAssembly版はモダンなWebブラウザのみ対応しますが、サーバ署名であればIE8などのレガシーなブラウザでも動作しますし、WebAssemblyのようにRust環境を整えてコンパイルすると言った手間もありません。
今回はサーバサイドでの署名処理を実装する方法について紹介します。
使い方
実際の使い方は通常のJavaScript SDKと変わりません。ただし、クライアントキーにはダミーを指定する必要があります。エラー回避用であって、処理には使われませんので適当な文字を指定してください。
SIGNATURE_SERVERというグローバル変数が定義されていると、それを使うようになっています。必ず定義してください。サーバの準備については後述します。
var SIGNATURE_SERVER = 'https://localhost/sign'; var applicationKey = 'e61...669'; var clientKey = 'dummy'; var ncmb = new NCMB(applicationKey, clientKey)
JavaScript SDKは特別版になります
JavaScript SDKは若干拡張しています。NCMBMania/ncmb_server_v2を使ってください。自分でコンパイルもできますが、こちらのJavaScriptファイルを使うのが早いでしょう。
署名サーバ
署名サーバのコードはNCMBMania/sign_server_v2にあります。送られた文字列の署名を生成して返すだけのサーバです。
利用する際にはHerokuにデプロイするのが一番簡単かと思います。リポジトリにHerokuボタンを用意していますので、それをクリックしてください。デプロイ時にはNCMBのクライアントキーが求められますので指定してください。
サーバが立ち上がったら、 https://app.herokuapp.com/ といったURLになるかと思います。 https://app.herokuapp.com/sign
を SIGNATURE_SERVER のURLとして指定してください。
まとめ
これで署名処理がサーバサイドで行われるようになります。利点としては前述の通り、クライアントキーの隠蔽が可能になります。欠点としてはサーバへのリクエストが一回追加されることでしょう。
なお、署名処理が隠蔽化されたとしてもデータストアを利用する部分などのロジックが隠蔽化される訳ではありませんのでご注意ください。ロジックを見せたくない場合にはスクリプト機能をご利用ください。