【问题标题】:How to access Google API's from Android, using "Public API access", not user authentication如何使用“公共 API 访问”而不是用户身份验证从 Android 访问 Google API
【发布时间】:2015-07-27 17:19:00
【问题描述】:

背景

我认为从 Android 访问 Google 服务的推荐方法是使用Google APIs Client Library for Java(对于某些服务,也建议使用播放服务)。

如果您想访问您的用户帐户,您可以使用 oauth2 对用户进行身份验证,但如果您想访问自己的服务,事情似乎不太清楚(例如,我想访问属于我的应用引擎项目的 Google Cloud Storage) .

服务帐号的问题

我在这里看到很多使用服务帐户,我在服务器端使用它们,发现它们是一个相对简单的解决方案,但这需要你部署你的私钥,所以我不认为这可能适用于公共 Android 应用。

解决方案:公共 API 访问

如果您进入云控制台的“凭据”页面: https://console.developers.google.com/project/[your_project]/apiui/credential
很明显,他们希望您在我所描述的情况下使用“public API access key”。这似乎不是基于 OAUTH 的。

我假设我仍会为此使用“GoogleCredential”类型,但在credential builder 的文档中我看不到如何执行此操作。设置的客户端功能似乎与 oauth2 访问(使用客户端 ID/秘密)有关。

问题

如何使用“公共 API 访问”密钥从 Android 应用访问 Google 服务。

或者,如果我对服务帐户有误 - 它们确实是推荐的解决方案,那么请给我一些证据,因为在我看来,它们肯定不是公开分发应用程序的正确解决方案。

【问题讨论】:

    标签: java android google-oauth google-api-java-client google-api-client


    【解决方案1】:

    好消息是它要容易得多。您可以使用服务帐户(即专用于您的应用的全新帐户)或普通帐户。

    对于您在应用中嵌入密钥的服务帐户,对于常规帐户,您在应用中嵌入刷新令牌。在这两种情况下,请注意安全风险并使用必要的最小范围。

    按照How do I authorise an app (web or installed) without user intervention? (canonical ?)中的步骤,无需编写任何代码即可获得刷新令牌

    【讨论】:

    • 但是我上面提到的“公共 API 密钥”——听起来显然是为了这个目的——似乎与服务帐户不对应,例如。他们只是提供一个字符串 API 密钥,而不是每个人都使用服务帐户的可下载文件。那么我如何将 API 密钥与 GoogleCredentials 对象一起使用?
    • 没有你想象的那么清楚。要访问云端硬盘,您的应用必须经过安全身份验证。使用公钥是不可能的,顾名思义,公钥在某种程度上是公开的。因此,要么调查服务帐户,要么使用存储的刷新令牌进行调查。
    • 但是您没有解决我在问题中给出的不想要您建议的解决方案的原因 - 在公共 Android 应用程序中为服务帐户分发私有 oauth 密钥是不是一个好主意。如前所述,我已经知道如何使用服务帐户 - 出于安全原因,我避免使用它。
    • 可能值得重申您想要实现的目标。如果您正在寻找直接访问 Google 服务的 Android 应用程序,则需要对其进行身份验证。这可以使用典型的用户身份验证机制来完成,也可以通过嵌入凭证来完成。没有别的办法!根据您的用例,您也许可以使用代理网络服务构建一些东西。
    猜你喜欢
    • 2017-03-01
    • 2011-12-22
    • 2017-11-28
    • 1970-01-01
    • 2023-03-27
    • 2017-01-12
    • 2020-07-07
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多