You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Google Sign-In库获取authorization code?

当然可以!Google Sign-In库完全支持获取auth code,不需要依赖WebView

你之前的代码是直接获取客户端侧的access token,但只要调整一下Google Sign-In的配置,就能轻松拿到可以传给服务端的auth code,具体步骤如下:

1. 调整GoogleSignInOptions配置

首先,你需要在初始化GoogleSignInOptions的时候,显式请求服务端auth code,并指定你的后端OAuth客户端ID(注意:这个ID是你在Google Cloud控制台中创建的「Web应用」类型的客户端ID,不是Android客户端ID):

// 替换成你的YouTube scope和后端客户端ID
const val YOUTUBE_SCOPE = "https://www.googleapis.com/auth/youtube.readonly"
const val YOUR_SERVER_CLIENT_ID = "你的后端Web客户端ID.apps.googleusercontent.com"

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestScopes(Scope(YOUTUBE_SCOPE))
    .requestServerAuthCode(YOUR_SERVER_CLIENT_ID)
    .build()

// 初始化GoogleSignInClient
val googleSignInClient = GoogleSignIn.getClient(context, gso)

2. 登录成功后获取auth code

在登录回调中,你不需要再用GoogleAccountCredential去拿token,直接从SignInAccount中提取serverAuthCode即可:

val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result.isSuccess) {
    val account = result.signInAccount
    val authCode = account?.serverAuthCode
    
    if (!authCode.isNullOrEmpty()) {
        // 这里把authCode传给你的服务端
        // 比如用Retrofit或者OkHttp发送POST请求
        sendAuthCodeToBackend(authCode)
    } else {
        // 处理auth code为空的异常情况
    }
}

关键注意事项

  • 客户端ID匹配:确保你的Android客户端ID和后端Web客户端ID在同一个Google Cloud项目下,否则会无法获取auth code。
  • 服务端换token逻辑:服务端拿到auth code后,需要向Google的token端点发送请求,参数包括:
    • code:你传过去的auth code
    • client_id:后端Web客户端ID
    • client_secret:后端客户端的密钥
    • grant_type:authorization_code
    • redirect_uri:可以设为postmessage(如果是纯后端调用)
  • auth code的有效性:每个auth code只能使用一次,服务端兑换后会得到access token和refresh token,建议保存refresh token以便后续刷新access token。

你之前的代码用GoogleAccountCredential获取的是客户端本地的access token,这种token只能在设备侧使用,无法安全地传给服务端(因为客户端token容易泄露),而auth code是专门用来让服务端去兑换服务端可用的access token的,安全性更高。

内容的提问来源于stack exchange,提问作者cora32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:37:16