私は、OAuthセキュリティを通じてWebAPIとやり取りするAndroidアプリケーションを持っています。アクセストークンを取得するには、リクエストのヘッダーにOAuthクレデンシャル(クライアントIDとクライアントシークレット)を送信する必要があります。私の質問は、アプリケーションが必要なときにこの2つの値(クライアントIDとクライアントシークレット)を使用する場所です。現在、私はコールでそれをハードコーディングしました。これらをstrings.xmlファイルに保存しても安全ですか?AndroidでOAuthクライアントの資格情報を保持する場所
答えて
リバースエンジニアのいずれかがハードコードされていると、安全なデータを保存するための共有プリフォーマンスを提供してください。strings.shared prefはデータを保存できる安全な場所です。
私はそれを得ました。しかし、私の質問は、私はどのようにコードで書くことなく、sharedpreferenceにクライアントのIDと秘密を入れなければならないのですか?ユーザーがアプリケーションをダウンロードしてインストールすると、ネットワーク通話が行われます。そのネットワーク通話が機能するためには、oauth資格情報が必要です。つまり、アプリでクレデンシャルをパッケージ化する必要があります。それについてどうすればいいですか? –
@AbhinavNairあなたのクレデンシャルを暗号化し、アプリケーションが最初に起動した場合、コードチェックに暗号化されたテキストを挿入し、そのテキストを復号化して共有プレフィックスに保存し、なぜなら、毎回解読は良い解決策ではないからです。 –
Andriodの文字列を暗号化および復号化する参考リンクを教えていただけますか? –
セキュリティが懸念される場合は、Androidキーストアで暗号化キーを暗号化して保存することで、SharedPreferenceにデータを保存できます。
キーストアはパスワードなどのアプリケーションの秘密の格納には直接使用されませんが、秘密鍵を格納するためにアプリケーションによって使用される安全なコンテナを提供します。悪意のある(権限のない)ユーザー検索するアプリ
ここでは、キーストアを作成するための素晴らしいチュートリアルです。 http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/
私はそれを得ました。しかし、私の質問は、私はどのようにコードで書くことなく、sharedpreferenceにクライアントのIDと秘密を入れなければならないのですか?ユーザーがアプリケーションをダウンロードしてインストールすると、ネットワーク通話が行われます。そのネットワーク通話が機能するためには、oauth資格情報が必要です。つまり、アプリでクレデンシャルをパッケージ化する必要があります。それについてどうすればいいですか? –
oauthを最初にアプリケーションに保存する場合は、アーキテクチャ全体をタイトに結合していませんか?アンドロイドクライアントは、oauth資格情報を取得するために、最初のwebcallをサーバーに作成する必要があります。 この呼び出しのセキュリティが心配な場合は、プッシュ通知メカニズムを使用してください。pushnotiticationのために登録し、サーバにgcmティックルでoauthを送信するよう依頼してください。 GCMのティックルは、アプリ署名のチェックがあるため安全です。 – crashOveride
いいえ、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");
しかし、私はクライアントIDと秘密でアプリケーションを出荷する必要があります。だから私はまだコードのSharedPreferenceにそれを書く必要があります。それは正しいのですか、私は誤解しましたか? –
"apktool"などの予備のエンジニアリングツールでデコンパイルすることができるので、それらを(特にあなたの秘密)xmlファイルに保存しないでください。 SharedPreferencesにそれらを保持する方が安全な方法だと私は思います。 –
私はそれを得た。しかし、私の質問は、私はどのようにコードで書くことなく、sharedpreferenceにクライアントのIDと秘密を入れなければならないのですか? ユーザーがアプリケーションをダウンロードしてインストールすると、ネットワーク通話が行われます。そのネットワーク通話が機能するためには、oauth資格情報が必要です。つまり、アプリでクレデンシャルをパッケージ化する必要があります。それについてどうすればいいですか? –
- 1. OAuthクライアントの資格情報の概念
- 2. devopsの資格情報を保存する場所
- 3. Androidのログイン資格情報を保存するのに最適な場所
- 4. クライアントの資格情報AFNetworking
- 5. OAuth 2.0クライアント資格情報でユーザーIDを取得
- 6. OAuth 2.0クライアントの資格情報フローと証明書の資格情報の相違点
- 7. Amazon EC2インスタンス - 資格情報ファイルを追加する場所
- 8. API資格情報を保存する
- 9. クライアントの資格情報を持つSSLによるHttpWebRequest
- 10. OAuth2クライアント資格情報フローの理解
- 11. ESXi Webクライアントの自動資格情報
- 12. MySqlクライアントの資格情報パケット
- 13. AAD microsoft graph、クライアントの資格情報
- 14. Springブート+ Oauth2クライアントの資格情報
- 15. DoAのクライアント資格情報を使用したOAuthでの投稿
- 16. 資格情報
- 17. 資格情報
- 18. ログイン資格情報を保存するandroid
- 19. コマンドラインアプリケーションのログイン資格情報の保存
- 20. クライアントサイドのoAuth資格情報を有効にするスワッガー
- 21. yammerの資格情報を持つログインウェブサイト?
- 22. WIFI資格情報を保存
- 23. curlリダイレクトログイン資格情報の保護
- 24. Gmail api - 資格情報の保存
- 25. 資格情報管理API(資格情報の削除)
- 26. ChallengeHandler.submitChallengeAnswer(資格情報)とWLAuthorizationManager.login(資格情報、SECURITY_CHECK_NAME)の相違点
- 27. SwashbuckleでOauth2クライアントの資格情報フローを有効にする
- 28. iOSの資格情報.app内に格納されている場所.app
- 29. Android MVP:ログイン資格情報の検証
- 30. NodeJSとOAuth資格情報をコードベースの外に保存していますか?
をしかし、私は必要があります。
がSharedPreferencesから戻ったクライアントIDとクライアントシークレットを取得するにはクライアントIDと秘密でアプリケーションを発送する。だから私はまだコードのSharedPreferenceにそれを書く必要があります。それは正しいのですか、私は誤解しましたか? –
これをどのように解決しましたか?私はまた、最初のネットワークコールのために私に与えられたclient_idとclient_secretを持っています。私は 'SharedPreferences'にそれらを単に格納することはできません。 – jlively