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

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

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

もしよろしければ、ご意見等お聞かせいただけないでしょうか。
CC BY-SA 3.0
2015-11-11T15:58:29.103
18698
2015-11-12T11:33:23.827
9846
question
android oauth
APIキー(トークン)を含むプログラムのソースコード公開について
APIキーをソースコードの中で使うべきではありません。

APIキーは、ユーザを特定し、そのユーザに課金したり、利用回数制限したりする目的で使われます。  
そのようなキーを他人に知られた場合、自分で利用していない分の料金を払ったり、回数制限で利用できなくなったりといった不利益を被る可能性があります。
CC BY-SA 3.0
2015-11-12T07:43:51.480
18723
2015-11-12T07:43:51.480
217
18698
answer
ビルドできない状態で公開するのは、ビルドできない理由とその解消方法を別途解説する必要が出てきますし、個人的には不親切に感じます。

一般的かどうかはわかりませんが、APIキーのみを定義したxmlファイルをリソースとし、プログラム側で参照する方法は如何でしょうか。  
この場合、対象のxmlファイルは公開せず(リポジトリに含めず)、リソースが存在しない時にはダミーのAPIキーを用いるロジックを実装する事で、APIキーを非公開としながらもビルドが通る環境を公開できると考えます。
CC BY-SA 3.0
2015-11-12T08:02:35.337
18724
2015-11-12T08:02:35.337
7241
18698
answer
> こうした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)
CC BY-SA 3.0
2015-11-12T11:33:23.827
18738
2015-11-12T11:33:23.827
2017-05-23T12:38:56.467
-1
8000
18698
answer