#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 таково по какой-то причине …)