Android 新谷歌登录API-刷新令牌 问题
我正在尝试使用用于对自己的后端服务器进行身份验证。对我的服务器的每次调用都包含idToken jwt作为承载令牌。在后端,我通过检查签名和令牌是否过期来验证令牌。问题是返回的jwts有1小时的过期时间,但我找不到任何方法来刷新令牌 问题Android 新谷歌登录API-刷新令牌 问题,android,google-signin,Android,Google Signin,我正在尝试使用用于对自己的后端服务器进行身份验证。对我的服务器的每次调用都包含idToken jwt作为承载令牌。在后端,我通过检查签名和令牌是否过期来验证令牌。问题是返回的jwts有1小时的过期时间,但我找不到任何方法来刷新令牌 问题 这是使用我的后端服务器对用户进行身份验证的有效/安全的方法吗 如何在用户不必再次通过登录流的情况下获取新的id令牌 代码 如何获取idToken客户端 fun Application.installAuthentication() { val googleJ
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))
}
}
}
fun showSignInDialog(){
val request=getSignInEnterQuest.builder()
.setServerClientId(谷歌服务器客户端ID)
.build()
Identity.getSignInClient(上下文)
.GetSigningent(请求)
.addOnSuccessListener{
googleSignInLauncher.launch(IntentSenderRequest.Builder(it.build())
}
}
fun handleSignInResult(结果:ActivityResult){
val credential=Identity.getSignInClient(上下文)
.getSignInCredentialFromIntent(结果.数据)
//稍后,此令牌将用于在我的后端查询与用户相关的数据
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))
}
}
}
它没有刷新令牌,不幸的是,我最终使用了old的静默登录功能。我已经测试过,如果我使用用于登录的,旧的将仍然能够执行静默登录
如果新的api具有此静默登录功能,那就太好了,但现在看来,如果您想要此“刷新”功能,您仍然需要使用旧的api。您有任何可以共享的工作示例吗?