当前位置: 首页 > 知识库问答 >
问题:

使用OAuth2以编程方式对Google进行身份验证

晋坚
2023-03-14

我如何以编程方式验证Google?既然ClientLogin(https://developers.Google.com/accounts/docs/authforinstalledApps)已被否决,那么我们如何使用OAuth2对Google执行编程身份验证呢?

使用ClientLogin,我们可以使用电子邮件和密码参数执行到https://www.google.com/accounts/ClientLogin的post并获得身份验证令牌。

有了OAuth2,我找不到解决办法!

我的应用程序是一个java后台进程。在下面的链接:developers.google.com/accounts/docs/oauth2installedapp#refresh中,我看到了如何使用刷新的令牌获得新的访问令牌。

问题是,我找不到一个java示例,说明当我有一个新的有效访问令牌时,如何实例化一个Analytics对象(例如)来执行查询

这是在调用“execute()”时返回401无效凭据的代码:

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();
    } 
}

问题出在哪里?

共有1个答案

拓拔飞飙
2023-03-14

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

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

 类似资料:
  • 问题内容: 如何以编程方式向Google进行身份验证?现在不推荐使用ClientLogin(https://developers.google.com/accounts/docs/AuthForInstalledApps),我们如何使用OAuth2对Google执行编程身份验证? 使用ClientLogin,我们可以 使用电子邮件和密码参数在https://www.google.com/accou

  • > 步骤: request=oauthClientRequest.AuthorizationProvider(OAuthProviderType.google)//AuthorizationProvider(OAuthProviderType.google).setState(OAuth.oauth_state).setResponseType(Oauth.oauth_code).setreDir

  • 我需要在使用PKCE的云运行中验证一个服务帐户(使用容器调用角色)。基本上,我的iOS应用程序发送HTTPS请求来调用特定的云运行容器(使用Django Rest框架)。 我找到了这个示例(它通过自签名的JWT向云运行endpoint进行身份验证,以换取令牌)。这正是我所需要的,但我想添加PKCE。我很困惑,我应该把code_verifier和code_challenge发送到哪里?如果我在容器中

  • null 我研究了OAuth2隐式授权,但它要求用户在成功验证后批准/拒绝应用程序。它在我的情况下不起作用,因为我同时拥有应用程序和API。 我查看了OAuth2密码授权,它并不完美,因为我需要公开client_id/client_secret。 我关注OAuth2的原因是因为该API最终将是公开的。 忘记OAuth2,在用户发布用户名/密码时手动生成access_token(在本例中,当API公

  • 我试图编写一个连接应用程序,将从外部来源接收一组数据,并通过其API将其放在microsoft dynamics 365 business central的实例中。文档说明有两种方法可以做到这一点,使用基本身份验证和通过Azure Active Directory登录。前者以编程方式简单明了,但文档非常清楚地表明,它不适用于生产环境。我可以使用邮递员来完成后一种操作,但过程的一部分涉及到我在弹出窗

  • GoogleCredential凭证=newGoogleCredential.Builder(). setTransfer(TRANSPORT). setJsonFactory(JSON_FACTORY). setServiceAccount tId("SOMETHING@developer.gserviceaccount.com"). setServiceAccount tScopes(Bigq