我们正在使用:
BMSClient.getInstance().registerAuthenticationListener("realm", new CustomAuthentication(this));以及:
AuthorizationManager.createInstance(this.getApplicationContext());
AuthorizationManager.getInstance().setAuthorizationPersistencePolicy(AuthorizationManager.PersistencePolicy.ALWAYS);要将授权数据存储在电话中,请执行以下操作。“授权数据将保存在本地存储”设置为“始终”。
上面的代码总是在启动时在我们的屏幕上运行,所以它总是在应用程序重新启动时运行。
我们遇到的问题是,经过一段时间(几个小时或几天)之后,当我们怀疑令牌过期时,我们会得到以HTTP307形式的响应。即使在重新启动应用程序之后,我们仍然会在请求中得到这个响应。绕过它的唯一方法是从设置中进入应用程序并清除所有数据。
以下问题将有助于我们在测试和可能的解决方案方面取得进展:
我们的自定义听者:
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));
}
}发布于 2016-03-15 14:10:26
当接收到307并重新发送请求时,您是否尝试过使用AuthorizationManager.clearAuthorizationData() API?
发布于 2016-03-10 15:16:49
回答你的问题:
1)将无限期地缓存授权令牌。该令牌在60分钟时间内过期,但将保持缓存状态,直到获得新令牌为止。
最佳做法是在原始令牌过期后获得一个新令牌。这可以通过在前一个令牌过期后运行一个新的授权挑战来实现。
2)您可以通过访问受保护的资源,使用AuthorizationManager等方式,在前一个令牌过期后始终使用obtainAuthorizationHeader获取新令牌。
3)目前无法使用AuthorizationManager注销MCA。我将与开发团队讨论未来的计划。
关于我在你的问题中看到的主要问题。我希望您正经历此问题,因为您正在尝试对授权服务使用过期令牌。即使令牌仍然被缓存在设备上,它在创建一个小时后就过期了。一旦令牌过期,我将尝试对MCA服务运行新的授权挑战。
如果您想提供您的代码,也可以帮助我进一步调查。
https://stackoverflow.com/questions/35887438
复制相似问题