こんにちは。イデペンジンです。
普段kintone開発に携わる中で気になったことがあったので記事にしました。
はじめに
kintoneってノーコード・ローコードで申請管理や問合せ管理ができる便利なPaaSシステムなんです。
ローコードなので便利にしたくてJavascriptでの開発作業(カスタマイズ)するなんてことあると思うんです。
カスタマイズするにあたって記事が結構あったり、ドキュメントも充実しているのでちょっとプログラムかじった人であればできちゃうと思うんです。
外部連携したくてSlackとかLINEとかに通知飛ばしたり、kintone内でアプリトークン作成してカスタマイズすることも簡単にできちゃうと思うんです。
その時にちゃんとトークン隠してますよね?
というのもトークンを隠すことに関する記事や記載が少ないんです(ちょっとプログラムかじった人ってトークンを隠さなきゃいけないこと知らないんじゃない??)。だから、ソースコードにそのまま書いちゃってるんじゃないか?と思ったんです。
ドキッとした人はぜひ最後まで読んでってください。
従来の動きとトークンを隠す場合を解説
トークンを隠さずにハードコーディング(JavaScriptに直接トークン情報を書いている)とkintoneの利用者がその外部APIを実行する前にトークンを保持してしまうんです。トークンを悪用されるとデータの不正取得や改ざんに繋がる可能性があります。(><)
ですので、外部連携(トークンなどを使用する場合など)にはトークンを秘匿することが望ましいです。幸いkintoneにはトークンをプラグインにて秘匿する機能があります。
手順としては以下となります。
①管理者によってトークンを事前にプラグイン画面から登録します。登録したデータはkintoneが用意しているプロキシサーバーへ保存されます。
②利用者から外部APIを実行する。この時、利用者はトークンを知りません。トークンの代わりにプラグインIDをプロキシサーバーへ送信します。
③プロキシサーバーは受け取ったリクエスト情報に①で設定しておいたトークンを付与します。
④プロキシサーバーからトークン情報を付与したAPIが外部サーバーへリクエストとして送信され、従来通り外部サーバーが適切な処理を実施します。
このように設計することで利用者にトークンを知らせることなく利用者に外部連携機能を提供することができます。
参考資料
①のトークンをプラグインに保存するやり方は下記を参考としてください。
https://cybozu.dev/ja/kintone/docs/js-api/plugins/set-config-for-proxy/
②の利用者がプロキシサーバーへ投げるリクエストは下記を参考としてください。
https://cybozu.dev/ja/kintone/docs/js-api/plugins/kintone-plug-in-proxy/
cybozuの「kintone 開発 Tips」で本内容に触れている記事もありますので参考としてください。
https://cybozudev.zendesk.com/hc/ja/articles/360019834671-kintone%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-Part2-%E6%83%85%E5%A0%B1%E3%81%AE%E9%9A%A0%E5%8C%BF%E6%96%B9%E6%B3%95%E7%B7%A8-
最後に
参考資料を読んでいくと「えー、プラグイン作らないといけないの?めんどくさー」となるかも?そんな時はトークン秘匿プラグインを頒布しておりますので是非確認してみてください。
こちらの記事でプラグインの紹介もしてますのでよかったら見てみてください!