授权PHP Web应用+ GDAL应用通过OAuth2使用Google服务

时间:2015-01-14 15:35:51

标签: google-oauth gdal

我编写了一个访问Google Maps Engine中存储的数据的PHP应用程序。我在API控制台中为Web应用程序创建了客户端ID 。因此,我可以授权我的应用使用Google API PHP client访问我的GME数据。到目前为止没问题。

我的网络应用程序,在某个特定时刻,调用系统二进制文件(ogr2ogr),它还需要访问存储在Google Maps Engine中的数据。所以,我假装使用GME driver并传递为配置参数:

  • 客户端ID,客户端密钥和api密钥(来自我在API控制台中创建的客户端ID)
  • 身份验证令牌和刷新令牌(来自授权响应)

但问题出现了:

当我使用以前的授权参数调用ogr2​​ogr时,它会返回HTTP 400错误:尝试多次使用OAuth2授权代码。看起来我传递的刷新令牌无效

更深入地解决问题,我找到了一些我不理解的内容: Google API控制台允许您为Web应用程序创建客户端ID ,但在客户端应用程序和服务器端应用程序之间没有区别。 Google OAuth2文档也有所不同:

因此,理论上,我创建的客户端ID用于客户端应用程序,我将其与服务器端应用程序(PHP)一起使用

所以,我的问题:

  • 如何在API控制台中创建一个客户端ID,我可以同时使用它:PHP应用程序和ogr2ogr二进制文件(我已经使用客户端ID测试了ogr2ogr二进制文件已安装的应用程序并且运行正常,但该客户端ID不能用于PHP应用程序。)
  • 为什么API控制台在客户端Web应用程序和服务器端Web应用程序的客户端ID之间没有区别,就像文档一样?显然,我误解了一些事情。例如,this tutorial使用 Web应用程序的客户端ID 来获取PHP代码(但仅适用于Web应用程序,而不是用于调用另一个也需要授权的程序)

非常感谢提前

1 个答案:

答案 0 :(得分:1)

您是对的,您尝试使用客户端身份验证流程使用服务器端身份验证密钥,这将无法正常工作。您需要做的是将Access令牌传递给GDAL GME驱动程序。

您可以通过以下方式之一进行操作:

  1. 只需将access=<your access token>参数添加到与ogr2ogr一起使用的“文件名”中(以“GME:”开头的字符串)。
  2. 您还可以使用GME_ACCESS_TOKEN环境变量。
  3. 这将使OAuth2流快捷,并且程序实际上不会进入AOuth2身份验证流程,而只是重新使用PHP脚本生成的身份验证令牌。这是有效的,因为您在同一台机器上和令牌到期之前发出请求。

    这(现在)也记录在http://trac.osgeo.org/gdal/wiki/GMEDriver