AmiVoice Techblog

AmiVoiceの音声認識に関する技術情報・活用方法・組み込み方などを発信するアドバンスト・メディアのテックブログです

AmiVoice Cloud PlatformのAppKeyの取り扱いについて

 

f:id:amivoice_techblog:20211004105820p:plain

f:id:amivoice_techblog:20210203154550p:plain ワオキツネザル

 

こんにちは!ワオキツネザルです。

新卒で株式会社アドバンスト・メディアという会社に入社して、音声認識APIの「AmiVoice Cloud Platform」という製品に関わっています。

私の発信が一人でも多くの方の役に立てたら嬉しいです。

 

この記事を書こうとしたきっかけ

こんなようなことがありました。(脚色あり)

f:id:amivoice_techblog:20210930171445p:plain

 

なにが問題だったのか

1コマ目のワオキツネザル君が作っていたサイト画面を見てみましょう。

f:id:amivoice_techblog:20210825165149p:plain

 

よく見ると使用するAPPKEYが見えていますね。

実はAPPKEYは見える場所に書いてはいけません

 

そもそもAppKeyとは

 APPKEYは音声認識APIを利用するために必要なKeyです。音声認識API利用時には必ず指定します。

 こんな感じです。

f:id:amivoice_techblog:20210825172542p:plain

1.【音声認識がしたい人】がAPPKEYを送る。
2.【音声認識サーバー】側がAPPKEYがOKか確認する。
3.  音声認識開始(≧▽≦)
 

AppKeyが見える形でプログラムを公開するのはやめよう

AppKeyが見える形でプログラムを公開するのはやめましょう。

その理由は、AppKeyがバレると知らない人に使われて料金が発生してしまう可能性があるからです。

 

Windowsやモバイル系のアプリであればAppKeyを暗号化させたり、ある程度のセキュリティ対策が可能になります。

 

でも、Webアプリのときは対策ができず、どうしてもAppKeyが見えてしまいます。

そのため、WebアプリのときはワンタイムAppKeyを使いましょう

 

ワンタイムAppKeyとは

ワンタイムAppKeyの説明はマニュアルに詳しく乗ってます。

ワンタイムAppKeyについて - AmiVoice Cloud Platform

AppKeyの機密性について

AppKeyは、貴社アプリケーションがAmiVoice Cloud Platform音声認識サービスを利用する際の「サービス認証キー文字列」であり、機密情報として取り扱う必要があります。しかるに、ブラウザ上で動作するWebアプリにおいてAppKeyをJavaScriptに記載してしまうと、Webアプリ利用者の端末内にキャッシュされたJavaScriptファイルから漏洩してしまう危険性が生じてしまいます。

この危険性を避けるために、Webアプリが本サービスに接続する際には、マイページに記載された[APPKEY]を使用せず、代わりにAmiVoice Cloud PlatformのワンタイムAppKey発行APIを利用するようにしてください。また、発行依頼の際には、適切な「有効時間」を設定するようにしてください。

※ワンタイムAppKeyは、マイページに記載された[APPKEY]と同様の機能を持つ「サービス認証キー文字列」ですが、「発行日時と有効時間」にもとづいた「有効期限日時」が設定されている点が異なります。

 

難しいので要約すると「専用のAPIを使うと有効な時間が決められたAppKeyが作れるよ」ってことです。

 

Webアプリではサーバー側でワンタイム取得して、クライアント側でそれを使って音声認識するのが良いかもです。

 

f:id:amivoice_techblog:20210930170933p:plain

 

クライアントが音声認識を開始しようとしたタイミングで、
以下のよう処理を行ってください。

1.「クライアント」がブラウザ経由で「サーバー」側にデータをくださいってアクセスする。
2.「サーバー」側が「音声認識サーバー」側にサービスIDとサービスパスワードを渡してワンタイムAPPKEYくださいってアクセスしてワンタイムAPPKEYを取得する。
3.「サーバー」側が「クライアント」側にワンタイムAPPKEYを返す。
4.「クライアント」が「音声認識サーバー」側とつなげて音声認識を開始する。

 

2番のワンタイムAPPKEY取得の際はcurlだとこのように取得します。 

$ curl "https://acp-api.amivoice.com/issue_service_authorization?sid=<サービスID>&spw=<サービスパスワード>&epi=30000"

細かいAPIの仕様が気になったら公式ドキュメントを参考にしてくださいね。

注意

ここでのIDとPASSはログイン時に使用するユーザーIDとパスワードでなく、マイページの接続情報に表示されている「サービスID」と「サービスパスワード」です。この「サービスID」と「サービスパスワード」も漏洩しないようにご注意ください。

 

まとめ

大事なのは2つ

AppKeyは漏れないようにしよう。

どうしてもAppKeyを隠すのが不可能ならワンタイムAppKeyを使おう。

 

この記事を書いた人