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

如何在不需要用户复制/粘贴auth代码的情况下验证Google Drive?

鲜于德泽
2023-03-14

我正在使用DriveCommandLine应用程序来学习一点Drive API。我只是想知道是否可以用Google Drive验证我的桌面应用程序,而不需要用户从浏览器复制/粘贴auth代码?而是让一个令牌从浏览器传递回应用程序?我能够做到这一点与Dropbox API和谷歌文档列表API,但无法弄清楚如何得到与谷歌驱动器API的工作。

谢了。

Google Drive API-DriveCommandline示例应用程序(略有修改):

public class DriveCommandLine {

  private static String CLIENT_ID = APPCONSTANTS.Google.CONSUMER_KEY;
  private static String CLIENT_SECRET = APPCONSTANTS.Google.CONSUMER_SECRET;

  private static String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";

  public static void main(String[] args) throws IOException, URISyntaxException {
    HttpTransport httpTransport = new NetHttpTransport();
    JsonFactory jsonFactory = new JacksonFactory();

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
        httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE))
        .setAccessType("offline")
        .setApprovalPrompt("force").build();

    String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build();
    System.out.println("Enter authorization code:");
    Desktop.getDesktop().browse(new URI(url));
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String code = br.readLine();

    GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
    GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);

    //Create a new authorized API client
    Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).build();
}

Google文档列表API:

    public void authenticate(){
            GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
            oauthParameters.setOAuthConsumerKey(APPCONSTANTS.Google.CONSUMER_KEY);

            OAuthSigner signer;
            if (APPCONSTANTS.Google.USE_RSA_SIGNING) {
                    signer = new OAuthRsaSha1Signer(APPCONSTANTS.Google.CONSUMER_SECRET);
            } else {
                oauthParameters.setOAuthConsumerSecret(APPCONSTANTS.Google.CONSUMER_SECRET);
                signer = new OAuthHmacSha1Signer();
            }

            GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer);

            oauthParameters.setScope(APPCONSTANTS.Google.SCOPES);

            oauthHelper.getUnauthorizedRequestToken(oauthParameters);

            String requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters);

            Desktop desktop = Desktop.getDesktop();
            URI url = new URI(requestUrl);
            desktop.browse(url);

            String token = oauthHelper.getAccessToken(oauthParameters);
    }

共有1个答案

宦高岑
2023-03-14

命令行示例是为了简单而编写的,不一定是为了最佳的用户体验。在本例中,它们作为本地应用程序运行,并使用安装的面向OAuth2.0的应用程序流。该流确实有一种模式,其中redirect_uri可以指向localhost,但它需要启动一个临时web服务器来接收重定向。它使用OOB模式,要求复制/粘贴代码,而不是使示例复杂化。

 类似资料:
  • 我有一些C代码,其中包含各种函数,每个函数都以不同类型的“handle”对象作为参数。所有这些句柄的实现都是相同的(它只是一个具有void指针和项计数的结构),因此只声明一个实现似乎是合乎逻辑的——但我还希望C编译器在用户将错误类型的句柄传递给函数时生成编译时错误。 我当前的方法使用类型定义创建各种句柄类型,它可以记录函数应该接受的句柄类型,但编译器会自动转换,因此不会将类型不匹配标记为错误。是否

  • 我正在开发一个企业应用程序,管理员在其中创建新用户(没有注册表单)。我正在使用Firebase Auth,它在很多方面都很棒,但我在我的用例中遇到了一个问题。当您使用时,由此创建的用户将自动登录。当管理员创建用户帐户时,这显然不起作用。有没有办法避免这种行为?谢了。

  • 本文向大家介绍JavaScript禁止复制与粘贴的实现代码,包括了JavaScript禁止复制与粘贴的实现代码的使用技巧和注意事项,需要的朋友参考一下 该操作是网民日常的一些基本操作,但有些网站为了保护版权(如小说类、图片类),禁止用户执行这些操作,这样就可以防止用户将正在浏览的文本,通过复制、粘贴的方式进行传播了。 oncopy事件: 定义和用法 oncopy 事件在用户拷贝元素上的内容时触发。

  • 有没有办法让用户在重置密码时重置其firebase密码,而无需实际验证帐户? 最初创建帐户时,用户信息中的“已验证”设置为false,一旦创建帐户,我们将收到一封带有验证帐户url的电子邮件。但是,当用户“忘记密码”时,密码重置邮件将发送给用户,当用户实际重置密码时,firebase userinfo“验证”设置为true。

  • 问题内容: 我正在尝试2个替代方法: 忽略右键 忽略+ ,+ 这是我的代码: 这是我的HTML: 该功能有效,但不起作用。 问题答案: 你不能 您可以尝试阻止某些矢量(例如,使右键单击更加困难的黑客,拦截+ ,使其难以选择文本)……但是它们只能起到某种作用,并且不可能阻止所有矢量(编辑->复制) ?查看源代码??等…)。 如果您想保护内容免受技术含量较低的用户的侵害,则可以采用这些方法……但是,正

  • 我写了下面的代码来登录网站“qtpselenium.com”。 如果我将Thread.Sleep放在中间,使代码执行暂停一段时间,下面的代码就可以正常工作。如果我对thread.sleep进行注释,代码就不能按预期工作。我尝试使用selenium的隐式和显式等待来使驱动程序等待元素可见,但代码只能在使用Thread.Sleep时按预期工作。 有没有什么方法可以使下面的代码在不使用thraed.sl