3

私のアプリケーションは、OAuth 認証を使用するサーバーに接続します。このようなアカウントを Account Manager に保存するにはどうすればよいですか? ログインしてパスした場合、次のようになります。

        Account account = new Account("user1", context.getString(R.string.ACCOUNT_TYPE));
        AccountManager am = AccountManager.get(context);
        if (am.addAccountExplicitly(account, "pass1", null)) {
            result = new Bundle();
            Log.i(TAG, "account: "+account.name+", "+account.type);
            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
            result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
            activity.setAccountAuthenticatorResult(result);

しかし、OAuth アカウントの場合、ユーザー名とパスの代わりに何を渡す必要がありますか? また、OAuth シークレットはどこに保存すればよいですか? OAuth トークンは KEY_AUTHTOKEN に格納する必要がありますか?

4

1 に答える 1

0

可能なパスワードを使用しないでくださいsetAuthToken。代わりに OAuth トークンを入れてください。

AccountManager は暗号化サービスやキーチェーンではないことを理解することが重要です。アカウント資格情報は、渡されたとおりにプレーン テキストで保存されます。ほとんどのデバイスでは、root のみがアクセスできるデータベースに保存されるため、これは特に問題ではありません。ただし、ルート化されたデバイスでは、デバイスへの adb アクセス権を持つすべてのユーザーが資格情報を読み取ることができます。

これを念頭に置いて、ユーザーの実際のパスワードを AccountManager.addAccountExplicitly() に渡すべきではありません。代わりに、攻撃者の使用が制限された、暗号的に安全なトークンを保存する必要があります。ユーザー資格情報が何か貴重なものを保護している場合は、同様のことを慎重に検討する必要があります。

于 2012-11-07T18:36:11.297 に答える