我的Android应用在AsyncTask
中使用Cognito进行身份验证,并在CognitoUserSession
中接收JWT令牌。然后使用CognitoCachingCredentialsProvider
在setLogins()
中设置此项。
我想在另一个AsyncTask
中检索此JWT令牌。但是getLogins()
上的CognitoCachingCredentialsProvider
返回的是0号地图。
获取令牌的最简单方法是什么?我应该再次将它存储在共享首选项中吗?
答案 0 :(得分:1)
SDK中的Get / SetLogins只是更新凭证提供程序内的地图,它们不会长期保存。如果您需要在某个任意时间跨线程访问它,那将是一种合理的方法来实现它。否则,只需使用完全相同的凭证提供程序即可。
答案 1 :(得分:0)
CognitoCachingCredentialsProvider
实际上是使用共享首选项来保存数据,但getLogins
返回的是0号哈希值。
持久化数据(JWT)的简便方法是AsyncTask
doInBackgraound
方法中的共享首选项,并在需要的任何位置进行检索。
答案 2 :(得分:0)
可以在登录时从aws获取这些令牌(刷新令牌/访问令牌/ id令牌),并按如下所示设置优先级:
final AuthenticationHandler authenticationCallBackManager = new AuthenticationHandler() {
@Override
public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice) {
/*SharedPreferenceCacheManager.writeString(
LoginActivity.this,
"ACCESS_TOKEN",
userSession.getAccessToken().getJWTToken());*/
//System.out.println(userSession.getAccessToken().getJWTToken());//<<-------access token
/*SharedPreferenceCacheManager.writeString(
LoginActivity.this,
"REFRESH_TOKEN",
userSession.getRefreshToken().getToken());*/
//System.out.println(userSession.getRefreshToken().getToken());//<<---------refresh token
SharedPreferenceCacheManager.writeString(
LoginActivity.this,
"ID_TOKEN",
userSession.getIdToken().getJWTToken());
//System.out.println(userSession.getIdToken().getJWTToken());//<<-----------id token(this id uses Authorization in aws-side)
//....
}
@Override
public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) {
AuthenticationDetails authenticationDetails = new AuthenticationDetails(
userId,
String.valueOf(editTextPassword.getText()), null);
//System.out.println(CognitoServiceConstants.AUTH_PARAM_USERNAME);
//System.out.println(CognitoServiceConstants.AUTH_PARAM_REFRESH_TOKEN);
// Pass the user sign-in credentials to the continuation
authenticationContinuation.setAuthenticationDetails(authenticationDetails);
// Allow the sign-in to continue
authenticationContinuation.continueTask();
}
@Override
public void getMFACode(MultiFactorAuthenticationContinuation continuation) {
//....
}
@Override
public void authenticationChallenge(ChallengeContinuation continuation) {
//....
}
@Override
public void onFailure(Exception exception) {
//....
}
};