Как получить действительный токен Google ID по истечении 1 часа

#android #authentication #kotlin #single-sign-on #google-signin

#Android #аутентификация #kotlin #единый вход #google-вход

Вопрос:

Я следовал инструкциям поhttps://developers.google.com/identity/sign-in/android/sign-in и я могу получить токен Google ID подписанного пользователя после того, как пользователь вошел в систему. Но токен истекает через 1 час.

Как я могу обновить действительный токен Google ID после истечения срока действия старого, не заставляя пользователя входить в систему вручную снова и снова? Я пытался использовать автоматический вход по истечении срока действия токена. Но, похоже, это не работает. Есть ли какой-либо способ получить действительный токен Google ID? Заранее спасибо!!

При первом входе в систему,

 private fun handleSignInResult(completedTask: Task<GoogleSignInAccount>) {
    try {
        val account = completedTask.getResult(ApiException::class.java)
        val idToken = account!!.idToken
        CheckDB(this, db).execute()
    } catch (e: ApiException) {
        Log.e("TAG","signInResult:failed code="   e.statusCode)
    }
}
  

когда токен истекает, я использую автоматическую регистрацию

 override fun onStart() {
    super.onStart()
    val account = GoogleSignIn.getLastSignedInAccount(this)
    if(account!=null) {
        sign_in_button.visibility = GONE
        mGoogleSignInClient!!.silentSignIn().addOnCompleteListener(this, object : OnCompleteListener<GoogleSignInAccount>{
            override fun onComplete(p0: Task<GoogleSignInAccount>) {
                val account = p0.getResult(ApiException::class.java)
                CheckDB(this@SignInActivity, db).execute()
            }
        })
    }
}
  

Ответ №1:

Когда ваш пользователь войдет в систему (в первый и единственный раз), используйте полученный токен для аутентификации на вашем собственном внутреннем сервере. Нет необходимости повторно входить в систему в Google. Подробности здесь:https://developers.google.com/identity/sign-in/android/backend-auth

Комментарии:

1. @ H Ystad, токен Google ID истекает через 1 час. Серверы отвечают 401 несанкционированным

2. Да, окно Google составляет 1 час. Но вам не нужно так быстро устанавливать тайм-аут. Получив токен от Google, завершите авторизацию на своем собственном сервере (как описано по ссылке, которую я опубликовал) и оставайтесь авторизованным столько, сколько захотите . Вот как говорится в документации Google: После подтверждения токена проверьте, есть ли пользователь уже в вашей базе данных пользователей. Если это так, установите аутентифицированный сеанс для пользователя. Если пользователя еще нет в вашей базе данных пользователей, создайте новую запись пользователя на основе информации в полезной нагрузке токена ID и установите сеанс для пользователя.

3. @H Ystad что, если токен нашего сервера действителен в течение 4 часов, а через 4 часа, если пользователь взаимодействует с приложением, он не может получить доступ к защищенным маршрутам, и в это время срок действия токена Google и токена сервера истекает

4. Проблема, конечно. Но тогда, может быть, вам следует просто реализовать что-то, чтобы ваш собственный токен обновлялся автоматически, поскольку Google one создает проблемы? (Я понимаю, что это не помогает с первоначальным вопросом, но я верю, что 1-часовое короткое окно Google таково по какой-то причине …)