java - 使用 OAuth2 以编程方式向 Google 进行身份验证

标签 java google-oauth google-signin

如何以编程方式向 Google 进行身份验证? 现在 ClientLogin (https://developers.google.com/accounts/docs/AuthForInstalledApps) 已弃用,我们如何使用 OAuth2 对 Google 执行编程身份验证?

使用 ClientLogin 我们可以发布一个帖子到 https://www.google.com/accounts/ClientLogin 使用电子邮件和密码参数并获取身份验证 token 。

使用 OAuth2 我找不到解决方案!

#

我的应用程序是一个 java 后台进程。 我看到,点击这个链接:developers.google.com/accounts/docs/OAuth2InstalledApp#refresh, how to get a new access token using a refreshed token。

问题是当我有一个新的有效访问 token 时,我找不到关于如何实例化 Analytics 对象(例如)以执行查询的 java 示例

这是我的代码,它在调用“execute()”时返回 401 Invalid credentials:

public class Test {

static final String client_id = "MY_CLIENT_ID";
static final String client_secret = "MY_SECRET";
static final String appName = "MY_APP";

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

static String access_token = "xxxx";
static String refreshToken = "yyyyy";

public static void main (String args[]){

    try {

        GoogleCredential credential = 
            new GoogleCredential.Builder()
                .setTransport(HTTP_TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setClientSecrets(client_id, client_secret).build();
        credential.setAccessToken(access_token);
        credential.setRefreshToken(refreshToken);
        //GoogleCredential
        Analytics analytics = Analytics.builder(HTTP_TRANSPORT, JSON_FACTORY)
            .setApplicationName(appName)
            .setHttpRequestInitializer(credential)
            .build();

        Accounts accounts = analytics.management().accounts().list().execute();
    } catch (Exception e) {
        e.printStackTrace();
    } 
}

有什么问题?

最佳答案

检查已安装应用程序的 OAuth 2 流程:

https://developers.google.com/accounts/docs/OAuth2InstalledApp

它仍然需要用户第一次使用浏览器进行身份验证,但是您可以存储刷新 token 并将其用于后续请求。

对于替代解决方案,请查看设备流程或服务帐户,它们在同一文档集中进行了说明。

关于java - 使用 OAuth2 以编程方式向 Google 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10835365/

相关文章:

java - Eclipse CVS 忽略 .class 文件——如何将其关闭?

java - 如何成功运行 Google Drive API 的 "Java Quickstart"示例?

android - 找不到符号类 GoogleSignInApi

java - Play Framework 2.0 表单助手 : from checkbox to List<String>

java - 一个 JFrame 的多个实例

google-app-engine - Google 项目在 Developers Console 中不可见

android - Firebase 身份验证不适用于已签名的 APK

java - 如何使用 Google Sign in 授权 Youtube Data api 请求?

java - Java中的序列化是什么?

google-oauth - 让 Cloud Run 服务成为 Apps Script 项目目标的困难 - 受众和范围