gpt4 book ai didi

android - 新的 Google 登录 API - 刷新 token

转载 作者:行者123 更新时间:2023-12-05 00:03:17 25 4
gpt4 key购买 nike

问题

我正在尝试使用 New Google Sign-In API用于使用我自己的后端服务器进行身份验证。对我的服务器的每次调用都包含 idToken jwt 作为不记名 token 。在后端,我通过检查签名来验证 token ,并检查 token 是否过期。问题是 New Google Sign-In API返回具有 1 小时到期时间的 jwts,但我找不到任何方法来刷新 token 。

问题

  1. 这是通过我的后端服务器验证用户身份的有效/安全方式吗?
  2. 如何在用户无需再次完成登录流程的情况下获得新的 ID token ?

代码

我如何获得 idToken 客户端

fun showSignInDialog() {
val request = GetSignInIntentRequest.builder()
.setServerClientId(GOOGLE_SERVER_CLIENT_ID)
.build()

Identity.getSignInClient(context)
.getSignInIntent(request)
.addOnSuccessListener {
googleSignInLauncher.launch(IntentSenderRequest.Builder(it).build())
}
}

fun handleSignInResult(result: ActivityResult) {
val credential = Identity.getSignInClient(context)
.getSignInCredentialFromIntent(result.data)

// later this token will be used for querying user-related data on my backend
setToken(credential.googleIdToken)
}

我如何在后端验证我的端点

fun Application.installAuthentication() {
val googleJwtIssuer = environment.config.property("jwt.google.domain").getString()
val googleJwtAudience = environment.config.property("jwt.google.audience").getString()
val jwtRealm = environment.config.property("jwt.google.realm").getString()
val googleJwkProvider = JwkProviderBuilder(URL("https://www.googleapis.com/oauth2/v3/certs"))
.cached(10, 24, TimeUnit.HOURS)
.rateLimited(10, 1, TimeUnit.MINUTES)
.build()
install(Authentication) {
jwt("google") {
verifier(googleJwkProvider) {
withIssuer(googleJwtIssuer)
withAudience(googleJwtAudience)
}
realm = jwtRealm
validate { credentials ->
if (credentials.payload.audience.contains(googleJwtAudience))
JWTPrincipal(credentials.payload)
else
null
}
}
}
}

// in my main
installAuthentication()
routing {
authenticate("google") {
get("/get-todos") {
val payload = call.principal<JWTPrincipal>()?.payload ?: error("JWTPrincipal not found")

call.respond(getTodos(payload.subject))
}
}
}

编辑

Google 登录 API 返回的示例 JWT(首次登录时)

{
"iss": "https://accounts.google.com",
"azp": "secret",
"aud": "secret",
"sub": "secret",
"email": "secret@gmail.com",
"email_verified": true,
"name": "Ben Jerry",
"picture": "https://lh3.googleusercontent.com/secret",
"given_name": "Patrik",
"family_name": "Aradi",
"locale": "en-GB",
"iat": 1616243551,
"exp": 1616247151
}

不幸的是它没有刷新 token

最佳答案

我最终使用了旧的 GoogleSignInApi为此的静默登录功能。我已经测试过,如果我使用 New Google Sign In api对于登录,旧的仍然可以执行静默登录。

如果新的有这个静默登录功能就好了,但现在看来如果你想要这个“刷新”功能,你仍然需要使用旧的 api。

关于android - 新的 Google 登录 API - 刷新 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66722104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com