From f4dfdcd8bf3782d6bee612f173802d653994413d Mon Sep 17 00:00:00 2001 From: Davinci9196 Date: Wed, 11 Mar 2026 17:06:02 +0800 Subject: [PATCH 1/2] Auth: Obtain auth again after consent --- .../main/kotlin/org/microg/gms/auth/signin/extensions.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt index 76de77e71f..f2d62ad334 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt @@ -109,7 +109,7 @@ suspend fun checkAccountAuthStatus(context: Context, packageName: String, scopeL suspend fun performSignIn(context: Context, packageName: String, options: GoogleSignInOptions?, account: Account, permitted: Boolean = false, idNonce: String? = null): Pair { val authManager = getOAuthManager(context, packageName, options, account) - val authResponse = withContext(Dispatchers.IO) { + var authResponse = withContext(Dispatchers.IO) { if (options?.includeUnacceptableScope == true || !permitted) { authManager.setTokenRequestOptions(consentRequestOptions) } @@ -120,9 +120,12 @@ suspend fun performSignIn(context: Context, packageName: String, options: Google if ("remote_consent" == authResponse.issueAdvice && authResponse.resolutionDataBase64 != null){ consentResult = performConsentView(context, packageName, account, authResponse.resolutionDataBase64) if (consentResult == null) return Pair(null, null) - } else { - if (authResponse.auth == null) return Pair(null, null) + authResponse = authManager.let { + it.putDynamicFiled(CONSENT_RESULT, consentResult) + withContext(Dispatchers.IO) { it.requestAuth(true) } + } } + if (authResponse.auth == null) return Pair(null, null) Log.d(TAG, "id token requested: ${options?.isIdTokenRequested == true}, serverClientId = ${options?.serverClientId}, permitted = ${authManager.isPermitted}") val idTokenResponse = getIdTokenManager(context, packageName, options, account)?.let { if (idNonce != null) { From a1f2057c8aee3b8658500bc43c7b465820846982 Mon Sep 17 00:00:00 2001 From: Davinci9196 Date: Fri, 20 Mar 2026 10:05:43 +0800 Subject: [PATCH 2/2] Return data to complete accessToken --- .../org/microg/gms/auth/signin/AuthSignInActivity.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/AuthSignInActivity.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/AuthSignInActivity.kt index dd7044d1dc..5a3e28eb8d 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/AuthSignInActivity.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/AuthSignInActivity.kt @@ -179,15 +179,15 @@ class AuthSignInActivity : AppCompatActivity() { } private suspend fun signIn(account: Account) { - val (_, googleSignInAccount) = performSignIn(this, config?.packageName!!, config?.options, account, true, idNonce) + val (accessToken, googleSignInAccount) = performSignIn(this, config?.packageName!!, config?.options, account, true, idNonce) if (googleSignInAccount != null) { - finishResult(CommonStatusCodes.SUCCESS, account = account, googleSignInAccount = googleSignInAccount) + finishResult(CommonStatusCodes.SUCCESS, account = account, googleSignInAccount = googleSignInAccount, accessToken = accessToken) } else { finishResult(CommonStatusCodes.INTERNAL_ERROR, "Sign in failed") } } - private fun finishResult(statusCode: Int, message: String? = null, account: Account? = null, googleSignInAccount: GoogleSignInAccount? = null) { + private fun finishResult(statusCode: Int, message: String? = null, account: Account? = null, googleSignInAccount: GoogleSignInAccount? = null, accessToken: String? = null) { val data = Intent() if (statusCode != CommonStatusCodes.SUCCESS) data.putExtra(AuthConstants.ERROR_CODE, statusCode) data.putExtra(AuthConstants.GOOGLE_SIGN_IN_STATUS, Status(statusCode, message)) @@ -196,7 +196,7 @@ class AuthSignInActivity : AppCompatActivity() { if (googleSignInAccount != null) { val authorizationResult = AuthorizationResult( googleSignInAccount.serverAuthCode, - googleSignInAccount.idToken, + accessToken, googleSignInAccount.idToken, googleSignInAccount.grantedScopes.map { it.scopeUri }, googleSignInAccount,