0

我正在尝试为使用 Google Drive 的 PC (Java) 和 Android 创建一个应用程序。我一直在弄乱这些示例以弄清楚 OAuth 2.0 的工作原理,一旦用户允许应用程序访问他们的数据,我就找不到自动将授权码返回到我的程序的好方法。Google Drive 快速入门示例使用需要用户输入的简单复制/粘贴机制,但这对用户来说并不方便。

似乎有几种建议的方法可以在不打扰用户的情况下检索授权代码(运行本地 Web 服务器、监视为身份验证而启动的浏览器窗口等),但 Google 不强烈推荐任何解决方案,也不提供任何解决方案这些解决方案如何在基本描述之外发挥作用的示例。以下指南在第 4 节中提供了一些建议(注意:我试图引用该部分,但 SO 不会让我知道存在的链接/图像的数量):

https://developers.google.com/youtube/v3/guides/authentication#installed-apps

过去有没有人实施过类似的事情,或者是否有最佳实践来做到这一点?如果可能的话,我更喜欢可以在多个平台上工作的解决方案(即不使用任何特定于平台的库)。

我想如果用户必须这样做一次(因为我将存储一个刷新令牌并从那时起使用它),这并不是什么大不了的事,但最好有办法解决它。

4

2 回答 2

0

在 Oauth2 协议中,您有两种获取授权码的方法:通过重定向到您可以控制的 url(可能指向您拥有的服务或本地主机)或通过复制粘贴。

第一种方法是您想要的,大概使用 localhost 作为重定向 uri,因为您在用户计算机上从桌面应用程序启动流程。您别无选择,只能让您的应用生成一个可以处理 codeurl 参数的小型 http 服务器。但是,您必须是 hackish:您如何从您的应用程序启动网络浏览器,对于它可以运行的任何操作系统?您如何将用户的机器配置为拒绝入站 http 连接?

IMO,最好的做法是复制粘贴:用户知道会发生什么

于 2013-10-03T12:51:28.777 回答
0

我刚刚为 Google Drive 实现了一个 oAuth2 解决方案。我最终通过 Google App Engine 创建了一个服务帐户。这是一个很好的入门链接:

https://developers.google.com/drive/service-accounts

有一个 Dr. Edit 示例可以帮助您编辑驱动器对象,例如电子表格。

GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)                
            .setServiceAccountScopes(scopes)                
            .setServiceAccountPrivateKeyFromP12File(pk12)
            .setServiceAccountUser(ACCESS_DOMAIN_IMPERSONATE) // <-- set user email here    
            .build();

您需要在您的域的 Google 域管理控制台/cpanel 中执行一些操作。

检查我大约一天前发布的以下 SO 答案:

OAuth Google API for Java 无法模拟用户

于 2013-10-03T13:27:11.007 回答