Я использую Amazon Cognito для аутентификации и хочу попросить, чтобы срок действия моего токена доступа и токена идентификатора истек примерно через час, кроме того, я прошел через многие ответы, которые они сказали использовать токен обновления, поскольку они имеют срок действия 10 лет,
так что мой вопрос, как использовать токен обновления в Android?
Прямо сейчас после входа в систему я устанавливаю CognitoCachingCredentialProvider
карту входа в систему для токена - и я использую как Facebook, так и адрес электронной почты для входа.
val authenticationHandler = object : AuthenticationHandler {
override fun onSuccess(userSession: CognitoUserSession?, newDevice: CognitoDevice?) {
//After Authentication User Cognito Access Id and Access Secret Extraction
currentSession = userSession!!
//Getting Session Token
val id = currentSession.idToken.jwtToken
//Credential Provider
val cognitoCachingCredentialsProvider = CognitoCachingCredentialsProvider(this@LoginActivity,resources.getString(R.string.cognito_identity_pool_id),Regions.myRegion)
cognitoCachingCredentialsProvider.clear()
//Login Map
val login = HashMap<String,String>()
login["myString"] = id
cognitoCachingCredentialsProvider.logins = login
//Off the main thread
SimpleAsyncTask(this@LoginActivity,cognitoCachingCredentialsProvider).execute()
}
override fun authenticationChallenge(continuation: ChallengeContinuation?) {
continuation?.continueTask()
}
override fun getAuthenticationDetails(authenticationContinuation: AuthenticationContinuation, userId: String) {
// The API needs user sign-in credentials to continue
Log.d(TAG, "userId is : $userId")
val authenticationDetails = AuthenticationDetails(userId, password, null)
authenticationDetails.authenticationType = "USER_PASSWORD"
// Pass the user sign-in credentials to the continuation
authenticationContinuation.setAuthenticationDetails(authenticationDetails)
// Allow the sign-in to continue
authenticationContinuation.continueTask()
}
override fun getMFACode(multiFactorAuthenticationContinuation: MultiFactorAuthenticationContinuation) {
// Multi-factor authentication is required; get the verification code from user
multiFactorAuthenticationContinuation.setMfaCode(null)
// Allow the sign-in process to continue
multiFactorAuthenticationContinuation.continueTask()
}
override fun onFailure(exception: Exception) {
// Sign-in failed, check exception for the cause
Log.e(TAG, "${exception.message}")
}
}
// Sign in the user
user.getSessionInBackground(authenticationHandler)
}
internal class SimpleAsyncTask(private val activity: Activity,private val credential:CognitoCachingCredentialsProvider) :
AsyncTask<Void, Void, Void>() {
override fun doInBackground(vararg p0: Void?):Void ?{
credential.refresh()
credential.setPersistenceEnabled(true)
return null
}
Подобный код также используется для входа в Facebook, как это
FacebookCallback<LoginResult> {
override fun onSuccess(loginResult: LoginResult) {
//Getting access Token
val accessToken = loginResult.accessToken.token
//Credentials Extraction
val credentials = CognitoCachingCredentialsProvider(this@LoginActivity,resources.getString(R.string.cognito_identity_pool_id),Regions.myRegion)
credentials.clear()
//Map of login
val login = HashMap<String,String>()
login["graph.facebook.com"] = accessToken
//Setting the value of map
credentials.logins = login
//Off the main thread
SimpleAsyncTask(this@LoginActivity,credentials).execute()
}
override fun onCancel() {
//Cancel code
Toast.makeText(this@LoginActivity,"Canceled",Toast.LENGTH_SHORT).show()
}
override fun onError(exception: FacebookException) {
//Error code
Toast.makeText(this@LoginActivity,exception.toString(),Toast.LENGTH_SHORT).show()
}
})
Теперь я использую это для проверки статуса пользователя при входе, проверяю условие cognitoCachingCredentialProvider.cachedId!=null
для проверки имени пользователя.
Но в течение часа он входит в систему как пользователь может войти в систему на долгое время