【问题标题】:Google Oauth2 Server side flow java with Refresh token带有刷新令牌的 Google Oauth2 服务器端流程 java
【发布时间】:2021-08-26 11:32:16
【问题描述】:

我正在尝试通过在 VM 中运行的 Java 应用程序从 GoogleAnalytics 获取一些数据。

我有一个可用的刷新令牌,我想使用这个刷新令牌来生成一个身份验证令牌并最终从 GA 获取数据。

这就是我当前代码的样子。

private static String getAccessToken(String refreshToken) throws IOException {
        TokenResponse tokenResponse = new GoogleRefreshTokenRequest(httpTransport, JSON_FACTORY, refreshToken, googleClientId, googleClientSecret)
                .setScopes(AnalyticsScopes.all())
                .setGrantType("refresh_token")
                .execute();
        return tokenResponse.getAccessToken();
    }

public Credential getCredentials() throws GeneralSecurityException, IOException, FileNotFoundException {
        final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

        // Load client secrets.
        InputStream in = GoogleAnalyticsDataImportService.class.getResourceAsStream(CLIENT_SECRET_JSON_RESOURCE);
        if (in == null) {
            throw new FileNotFoundException("Resource not found: " + CLIENT_SECRET_JSON_RESOURCE);
        }
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

        String clientId = clientSecrets.getDetails().getClientId();
        String clientSecret = clientSecrets.getDetails().getClientSecret();

        Credential credential = new GoogleCredential.Builder()
                .setTransport(HTTP_TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setClientSecrets(clientId, clientSecret)
                .build();

        String refreshToken = "<REFRESH-TOKEN>"; //Find a secure way to store and load refresh token
        credential.setAccessToken(getAccessToken(refreshToken));
        credential.setRefreshToken(refreshToken);

        return credential;
    }

这里的问题是 GoogleCredentials 已被弃用,如果没有它使用 refreshToken,我无法找到创建 Credentials 类的方法。

我还尝试了另一个流程,但这会打开浏览器以使用户获得身份验证,但我不希望这样。 前端将处理用户身份验证,我计划将刷新令牌安全地存储在数据库中以供将来 API 访问。

如何使用刷新令牌并创建凭据类以便访问 Google Analytics(分析)数据?

【问题讨论】:

    标签: oauth-2.0 google-oauth google-analytics-api google-oauth-java-client


    【解决方案1】:

    基于您可以查看的 GoogleCredential 类 Java Doc

    https://github.com/googleapis/google-auth-library-java

    我快速查看了一下。应该可以通过 GoogleCredentials 而不是已弃用的 GoogleCredential 获取令牌

    GoogleCredentials credentials = GoogleCredentials.fromStream(new 
    FileInputStream("/path/to/credentials.json"));
    credentials.refreshIfExpired();
    AccessToken token = credentials.getAccessToken();
    // OR
    AccessToken token = credentials.refreshAccessToken();
    

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 2018-10-17
      • 2016-09-16
      • 1970-01-01
      • 2013-08-30
      • 2016-08-03
      • 2022-07-15
      • 2021-07-01
      • 1970-01-01
      相关资源
      最近更新 更多