当前位置: 首页 > 面试题库 >

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

乐正翰
2023-03-14
问题内容

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

使用ClientLogin,我们可以
使用电子邮件和密码参数在https://www.google.com/accounts/ClientLogin上发布帖子,
并获取身份验证令牌。

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

我的应用程序是一个Java后台进程。我通过以下链接看到了这些地址:developers.google.com/accounts/docs/OAuth2InstalledApp#refresh,如何使用刷新的令牌获取新的访问令牌。

问题是,当我拥有新的有效访问令牌时,找不到关于如何实例化Analytics对象(例如)以执行查询的Java示例。

这是我的代码,当调用“ 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();
    } 
}

问题是什么?


问题答案:

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

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

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

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



 类似资料:
  • 我如何以编程方式验证Google?既然ClientLogin(https://developers.Google.com/accounts/docs/authforinstalledApps)已被否决,那么我们如何使用OAuth2对Google执行编程身份验证呢? 使用ClientLogin,我们可以使用电子邮件和密码参数执行到https://www.google.com/accounts/Cli

  • > 步骤: 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发送到哪里?如果我在容器中

  • 我正在尝试编写一个简单的后端来访问我的Google Cloud Firestore,它位于Google Kubernetes引擎中。在我的本地计算机上,我使用以下代码对Firestore进行身份验证,详细内容见谷歌文档。 这将拉取GOOGLE_APPLICATION_CREDENTIALS环境变量,并用我的填充它,这是我通过使用角色创建服务号获得的。 所以,在本地,我的代码运行良好。我可以到达我的

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

  • 我在我的程序中使用IMAP客户端。我试图通过使用OAuth2机制(使用这些说明)IMAP客户端访问Office 365 Outlook。 当我在IMAP客户端中进行身份验证时,身份验证失败,但Google和Outlook.com的OAuth2身份验证工作正常。Office 365在IMAP中是否支持OAuth2身份验证?如果支持,如何进行身份验证?