APIキー(トークン)を含むプログラムのソースコード公開について


現在、TwitterやLast.fmにメッセージを送信するAndroidアプリを開発していますが、アプリには各サイトから取得したAPIキー(トークン)が含まれています。

もしこれらのアプリのソースコードを公開したいと思った場合、APIキーはどのように取り扱うのが一般的なのでしょうか？  
特定のソースコードだけ切り離してビルドできない状態で公開するのはおかしいでしょうか？

また、こうしたAPIキーを他者に参照された場合、どのようなリスクがありますか？  
(APKファイルを展開して参照されるリスクに対して、どこまで備える必要があるでしょうか？)

もしよろしければ、ご意見等お聞かせいただけないでしょうか。




> こうしたAPIキーを他者に参照された場合、どのようなリスクがありますか？

APIキーを手に入れた他者が、あなたに成りすましてAPIを呼び出すことができてしまいます。

その結果考えられる問題としては

  * あなたのアプリしかアクセスできないはずの情報にアクセスされる
  * 他者がそのAPIキーで悪事を働いた場合、あなたのアプリが悪さをしたと思われる
  * あなたのアプリと関係のないところで多数の呼び出しが行われることで、APIの呼び出し回数制限や従量課金に引っかかる

などが挙げられますが、実際にはそのAPIキーで何ができるのか次第です。

例えば Twitter の Consumer Token
で言えば、これ単体を盗んでできることはそのアプリに成りすまして悪事を働いて風評被害を狙うぐらいでしょう。しかしユーザーごとの Access Token
まで盗むことができれば、ユーザーのDMを読み取ったり、ユーザーに成りすまして広告ツイートやDMを送ることができてしまいます。

というところで、Consumer Token よりユーザーごとの Access Token の管理の方が重要ですし、それがしっかりできていれば
Consumer Token
については妥協してもいいかなと思います。オープンソースのTwitterクライアントだと普通に平文でGithubに上げてたりしますし。

[security - Should I obfuscate OAuth consumer secret stored by Android app? -
Stack Overflow](https://stackoverflow.com/q/7121966/2818869)




> こうしたAPIキーを他者に参照された場合、どのようなリスクがありますか？

APIキーを手に入れた他者が、あなたに成りすましてAPIを呼び出すことができてしまいます。

その結果考えられる問題としては

  * あなたのアプリしかアクセスできないはずの情報にアクセスされる
  * 他者がそのAPIキーで悪事を働いた場合、あなたのアプリが悪さをしたと思われる
  * あなたのアプリと関係のないところで多数の呼び出しが行われることで、APIの呼び出し回数制限や従量課金に引っかかる

などが挙げられますが、実際にはそのAPIキーで何ができるのか次第です。

例えば Twitter の Consumer Token
で言えば、これ単体を盗んでできることはそのアプリに成りすまして悪事を働いて風評被害を狙うぐらいでしょう。しかしユーザーごとの Access Token
まで盗むことができれば、ユーザーのDMを読み取ったり、ユーザーに成りすまして広告ツイートやDMを送ることができてしまいます。

というところで、Consumer Token よりユーザーごとの Access Token の管理の方が重要ですし、それがしっかりできていれば
Consumer Token
については妥協してもいいかなと思います。オープンソースのTwitterクライアントだと普通に平文でGithubに上げてたりしますし。

[security - Should I obfuscate OAuth consumer secret stored by Android app? -
Stack Overflow](https://stackoverflow.com/q/7121966/2818869)

