2

私たちは以下を使用しています:

BMSClient.getInstance().registerAuthenticationListener("realm", new CustomAuthentication(this));

と:

AuthorizationManager.createInstance(this.getApplicationContext());
AuthorizationManager.getInstance().setAuthorizationPersistencePolicy(AuthorizationManager.PersistencePolicy.ALWAYS);

電話に認証データを保存します。「認証データはローカル ストレージに保存されます」が ALWAYS に設定されています。

上記のコードは、起動時にスプラッシュスクリーンで常に実行されるため、アプリの再起動時に常に実行されます。

私たちが抱えていた問題は、トークンの有効期限が切れたと思われる時間が経過した後 (数時間または数日)、HTTP 307の形式で応答を受け取ることです。アプリを再起動した後でも、リクエストに対してこの応答を取得し続けます。それを回避する唯一の方法は、設定からアプリに入り、すべてのデータを消去することです.

次の質問は、テストと可能な解決策を進めるのに役立ちます。

  1. トークンが BMSClient にキャッシュされる期間はどれくらいですか? (テスト目的)
  2. AuthorizationManager は、トークンの新しいフェッチを強制するのに何らかの方法で役立ちますか?
  3. 彼らはログアウト機能に取り組んでいますか?

カスタム リスナー:

public class CustomAuth implements AuthenticationListener {

    private Context activityContext;

    public CustomAuth(Context activityContext) {
        this.activityContext = activityContext;
    }

    @Override
    public void onAuthenticationChallengeReceived(AuthenticationContext authContext, JSONObject challenge, Context context) {
        //1. read the challenge JSONObject
        //2. handle the challenge (use the context for handling UI based operations)
        //3. return response using the AuthenticationContext authContext
        SharedPreferences preferences = activityContext.getSharedPreferences("UserPreference", Context.MODE_PRIVATE);
        String email = preferences.getString("email", "");
        if(email.equals("")) {
            email = "unidentified-user@error.com";
        }
        JSONObject jsonEmail = new JSONObject();
        try {
            jsonEmail.put("email", email);
        } catch (JSONException e) {
            authContext.submitAuthenticationChallengeAnswer(null);
        }
        authContext.submitAuthenticationChallengeAnswer(jsonEmail);

    }

    @Override
    public void onAuthenticationSuccess(Context context, JSONObject info) {
        //additional operations in case of authentication success
        Log.d("Authentication", "Auth success: " + String.valueOf(info));
    }

    @Override
    public void onAuthenticationFailure(Context context, JSONObject info) {
        //additional operations in case of authentication failure
        Log.d("Authentication", "Auth failure ." + String.valueOf(info));
    }
}
4

2 に答える 2

0

質問に答えるには:

1) 認証トークンは無期限にキャッシュされます。トークンは 60 分後に期限切れになりますが、新しいトークンが取得されるまでキャッシュされたままになります。

元のトークンの有効期限が切れたら、新しいトークンを取得することをお勧めします。これは、前のトークンの有効期限が切れた後に新しい認証チャレンジを実行することで実現できます。

2) 保護されたリソースにアクセスするか、obtainAuthorizationHeader などを使用して、以前のトークンの有効期限が切れたら、いつでも AuthorizationManager を使用して新しいトークンを取得できます。

3) 現在、AuthorizationManager を使用して MCA からログアウトする方法はありません。今後の予定について開発チームと話し合う予定です。

あなたの質問に見られる主な問題に関して。認証サービスに対して期限切れのトークンを使用しようとしているため、この問題が発生していると思います。トークンはまだデバイスにキャッシュされていますが、作成後 1 時間で期限切れになります。トークンの有効期限が切れたら、MCA サービスに対して新しい認証チャレンジを実行しようとします。

さらに調査するのに役立つコードを提供したい場合。

于 2016-03-10T15:16:49.613 に答える