2012-01-18 7 views
2

私は、ユーザーがオフライン(遠隔地)で使用できるようにする開発中のアプリを持っています。目標は、ユーザーの認証が必要なログインを行うことです。オンラインの場合、認証はoauthトークンを使用します。しかし、オフラインの場合、トークンの検証は行われません。だから、私はユーザーがローカルに格納された情報を使用して認証することを許可したい。セキュリティ - 有効なオンラインログインが事前に発生したときにのみオフラインログインを許可するAndroidアプリ

提案:

  1. 要求正しい資格情報 - >ユーザーがオンラインならば、ユーザー名&パスワード

  2. に入るのOAuthトークンを進め、

    。成功した場合、AESで暗号化されたユーザ名/パスワード+塩類を保存する
    b。失敗した場合、再要求正しい資格情報

  3. オフラインであれば、上記と同じ暗号化を使用して、ユーザー名/パスワードの組み合わせにステップ2aで保存された最近の成功したオンラインログインのリストに対して

  4. テストオフラインで暗号化された資格情報を暗号化します。 a。信用が保存されたバージョンのいずれかと一致する場合、オフラインモードでアプリケーションとローカルデータにアクセスします
    b。 credsをが一致しない場合、再要求し、正しいcredsを

質問: がローカルに暗号化されたコンボUNオンラインログインプロセスの+ PW +塩の妥協のセキュリティを保存するのでしょうか?さらなる考え/助言?

ありがとうございます。

+1

2つの言葉で理論的には妥協するつもりですが、良いencアルゴリズムを使用すると実際にそれを解読することは不可能に近くなります。 Windowsドメインとlocalhostアカウントを覚えていますか?ネットワークに接続されていなければ、引き続きあなたを受け入れることができます。すべてのUNIXシステムと同様に、さまざまな認証サービスに対してあなたをチェックできますが、暗号化されたパスワードで/ etc/shadowや/etc/master.passwordを持っています... –

+0

良い暗号化アルゴリズムを取得し、それを行う:))) –

答えて

1

あなたの要件は、

public class MySession { 
    private SharedPreferences sharedPref; 
    private static Editor editor; 

    public static final String My_API_KEY = "1234"; 
    public static final String My_CLIENT_VERSION = "1.0"; 
    private static final String My_API_TOKEN = "api_token"; 
    private static final String My_USER_SCREEN_NAME ="profilepic"; 
    private static final String SHARED = "my_Preferences"; 

    public MySession(Context context) { 
     sharedPref = context.getSharedPreferences(SHARED, Context.MODE_PRIVATE); 
     editor = sharedPref.edit(); 
    } 
    public void storeToken(String apiToken) { 
     editor.putString(My_API_TOKEN, apiToken);  
     editor.commit(); 
    } 
    public String getToken() { 
     return sharedPref.getString(My_API_TOKEN,null);  
    } 
} 
-3

は、ログインの詳細初めてのユーザを掲載し、共有環境設定で可能です。認証後、ユーザ名とパスワードを連結し、md5/sha1を作成します。共有プリファレンスまたはローカルsqlite dbに格納します。

ユーザーがオフライン、ログインの詳細についてはCONCATを尋ねると同じ保存場所からそれを検証している間に次の時間。

SHA1/MD5は一方向暗号化されて復号化することはできません。したがって、ログインの詳細は常にデバイスで安全です。

関連する問題