【问题标题】:How to get valid Google ID token after it expires in 1 hour如何在 1 小时内过期后获取有效的 Google ID 令牌
【发布时间】:2020-12-19 19:21:49
【问题描述】:

我已按照https://developers.google.com/identity/sign-in/android/sign-in 上的指南进行操作,在用户登录后我可以获取已登录用户的 Google ID 令牌。但令牌将在 1 小时后过期。

如何在旧的 Google ID 令牌过期后刷新有效的 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()
            }
        })
    }
}

【问题讨论】:

    标签: android authentication kotlin single-sign-on google-signin


    【解决方案1】:

    当您的用户登录时(第一次也是唯一一次),使用获得的令牌对您自己的后端服务器进行身份验证。无需在谷歌重新登录。 详情在这里:https://developers.google.com/identity/sign-in/android/backend-auth

    【讨论】:

    • @H Ystad,Google ID 令牌会在 1 小时后过期。服务器以未经授权的 401 响应
    • 是的,Google 的窗口是 1 小时。但是不必那么快超时。从 Google 获得令牌后,在您自己的服务器上完成授权(如我发布的链接中所述),并保持授权只要您愿意。以下是 Google 文档的说明: 验证令牌后,检查用户是否已在您的用户数据库中。如果是这样,为用户建立一个经过身份验证的会话。如果用户尚未在您的用户数据库中,请根据 ID 令牌负载中的信息创建新的用户记录,并为该用户建立会话。
    • 一个问题,同意。但是也许你应该实现一些让你自己的令牌自动更新的东西,因为谷歌会带来问题? (我意识到这对最初的问题没有帮助,但我相信谷歌的 1 小时短窗口是有原因的......)
    猜你喜欢
    • 2015-12-30
    • 2017-11-15
    • 2012-11-13
    • 2020-02-23
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2020-06-07
    相关资源
    最近更新 更多