2016-03-31 18 views
4

私は、OAuthセキュリティを通じてWebAPIとやり取りするAndroidアプリケーションを持っています。アクセストークンを取得するには、リクエストのヘッダーにOAuthクレデンシャル(クライアントIDとクライアントシークレット)を送信する必要があります。私の質問は、アプリケーションが必要なときにこの2つの値(クライアントIDとクライアントシークレット)を使用する場所です。現在、私はコールでそれをハードコーディングしました。これらをstrings.xmlファイルに保存しても安全ですか?AndroidでOAuthクライアントの資格情報を保持する場所

+0

をしかし、私は必要があります。

sharedPreferences.edit() .putString("client_id", "your_client_id") .putString("client_secret", "your_client_secret") .apply(); 

がSharedPreferencesから戻ったクライアントIDとクライアントシークレットを取得するにはクライアントIDと秘密でアプリケーションを発送する。だから私はまだコードのSharedPreferenceにそれを書く必要があります。それは正しいのですか、私は誤解しましたか? –

+0

これをどのように解決しましたか?私はまた、最初のネットワークコールのために私に与えられたclient_idとclient_secretを持っています。私は 'SharedPreferences'にそれらを単に格納することはできません。 – jlively

答えて

2

リバースエンジニアのいずれかがハードコードされていると、安全なデータを保存するための共有プリフォーマンスを提供してください。strings.shared prefはデータを保存できる安全な場所です。

+1

私はそれを得ました。しかし、私の質問は、私はどのようにコードで書くことなく、sharedpreferenceにクライアントのIDと秘密を入れなければならないのですか?ユーザーがアプリケーションをダウンロードしてインストールすると、ネットワーク通話が行われます。そのネットワーク通話が機能するためには、oauth資格情報が必要です。つまり、アプリでクレデンシャルをパッケージ化する必要があります。それについてどうすればいいですか? –

+0

@AbhinavNairあなたのクレデンシャルを暗号化し、アプリケーションが最初に起動した場合、コードチェックに暗号化されたテキストを挿入し、そのテキストを復号化して共有プレフィックスに保存し、なぜなら、毎回解読は良い解決策ではないからです。 –

+0

Andriodの文字列を暗号化および復号化する参考リンクを教えていただけますか? –

1

セキュリティが懸念される場合は、Androidキーストアで暗号化キーを暗号化して保存することで、SharedPreferenceにデータを保存できます。

キーストアはパスワードなどのアプリケーションの秘密の格納には直接使用されませんが、秘密鍵を格納するためにアプリケーションによって使用される安全なコンテナを提供します。悪意のある(権限のない)ユーザー検索するアプリ

ここでは、キーストアを作成するための素晴らしいチュートリアルです。 http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/

+0

私はそれを得ました。しかし、私の質問は、私はどのようにコードで書くことなく、sharedpreferenceにクライアントのIDと秘密を入れなければならないのですか?ユーザーがアプリケーションをダウンロードしてインストールすると、ネットワーク通話が行われます。そのネットワーク通話が機能するためには、oauth資格情報が必要です。つまり、アプリでクレデンシャルをパッケージ化する必要があります。それについてどうすればいいですか? –

+0

oauthを最初にアプリケーションに保存する場合は、アーキテクチャ全体をタイトに結合していませんか?アンドロイドクライアントは、oauth資格情報を取得するために、最初のwebcallをサーバーに作成する必要があります。 この呼び出しのセキュリティが心配な場合は、プッシュ通知メカニズムを使用してください。pushnotiticationのために登録し、サーバにgcmティックルでoauthを送信するよう依頼してください。 GCMのティックルは、アプリ署名のチェックがあるため安全です。 – crashOveride

-2

いいえ、strings.xmlに保存することは安全ではありません。代わりにSharedPreferencesを使用してください。このような

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 

、その後、クライアントIDとクライアントシークレットを格納します:たとえば

String clientId = preferences.getString("client_id", "No ID"); 
String clientSecret = preferences.getString("client_secret", "No Secret"); 
+0

しかし、私はクライアントIDと秘密でアプリケーションを出荷する必要があります。だから私はまだコードのSharedPreferenceにそれを書く必要があります。それは正しいのですか、私は誤解しましたか? –

+0

"apktool"などの予備のエンジニアリングツールでデコンパイルすることができるので、それらを(特にあなたの秘密)xmlファイルに保存しないでください。 SharedPreferencesにそれらを保持する方が安全な方法だと私は思います。 –

+1

私はそれを得た。しかし、私の質問は、私はどのようにコードで書くことなく、sharedpreferenceにクライアントのIDと秘密を入れなければならないのですか? ユーザーがアプリケーションをダウンロードしてインストールすると、ネットワーク通話が行われます。そのネットワーク通話が機能するためには、oauth資格情報が必要です。つまり、アプリでクレデンシャルをパッケージ化する必要があります。それについてどうすればいいですか? –

関連する問題