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

Java后端如何通过serverAuthCode获取Google access token

后端通过serverAuthCode兑换谷歌Access Token的Java实现方案

前置准备

  • 提前在谷歌云控制台创建OAuth 2.0凭据,类型选择Web应用,获取对应的客户端ID(clientId)和客户端密钥(clientSecret),需确保和前端集成谷歌登录时关联的是同一个谷歌云项目
  • 前端请求serverAuthCode时,需传入上述Web应用类型的客户端ID作为服务器客户端ID参数

第一步:引入谷歌官方API依赖

Maven配置(pom.xml):

<dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client</artifactId>
    <version>1.34.1</version>
</dependency>
<dependency>
    <groupId>com.google.http-client</groupId>
    <artifactId>google-http-client-jackson2</artifactId>
    <version>1.43.3</version>
</dependency>

Gradle配置:

implementation 'com.google.oauth-client:google-oauth-client:1.34.1'
implementation 'com.google.http-client:google-http-client-jackson2:1.43.3'

第二步:核心兑换逻辑实现

import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.auth.oauth2.TokenResponse;
import com.google.api.client.auth.oauth2.AuthorizationCodeTokenRequest;

import java.io.IOException;

public class GoogleAuthService {
    // 替换为你自己的Web类型客户端ID
    private static final String CLIENT_ID = "你的Web应用客户端ID";
    // 替换为你自己的Web类型客户端密钥
    private static final String CLIENT_SECRET = "你的Web应用客户端密钥";
    // 谷歌OAuth2.0 token兑换接口地址
    private static final String TOKEN_SERVER_URL = "https://oauth2.googleapis.com/token";
    // 移动端场景下redirect_uri固定为该值即可
    private static final String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";

    private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

    public TokenResponse exchangeAuthCodeForToken(String serverAuthCode) throws IOException {
        // 构造兑换请求
        AuthorizationCodeTokenRequest request = new AuthorizationCodeTokenRequest(
                HTTP_TRANSPORT,
                JSON_FACTORY,
                new GenericUrl(TOKEN_SERVER_URL),
                serverAuthCode
        );

        // 设置请求参数
        request.setClientId(CLIENT_ID)
                .setClientSecret(CLIENT_SECRET)
                .setRedirectUri(REDIRECT_URI);

        // 执行请求获取token结果
        TokenResponse tokenResponse = request.execute();

        // 可直接获取所需字段
        String accessToken = tokenResponse.getAccessToken();
        Long expiresIn = tokenResponse.getExpiresInSeconds();
        String refreshToken = tokenResponse.getRefreshToken(); // 仅前端请求时设置access_type=offline才会返回
        String idToken = (String) tokenResponse.get("id_token");

        return tokenResponse;
    }
}

注意事项

  • serverAuthCode为一次性凭证,兑换成功后立即失效,不可重复使用
  • 如需获取refresh_token,前端请求serverAuthCode时需额外添加access_type=offline参数
  • 客户端ID、客户端密钥属于敏感信息,需存储在后端安全配置中,禁止泄露到前端侧
  • 拿到access_token后可根据业务需求调用谷歌对应开放接口,拿到id_token后可进一步校验签名合法性,避免伪造请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:42:02