【问题标题】:Authorizing a PHP web app + GDAL app to use Google services via OAuth2通过 OAuth2 授权 PHP Web 应用 + GDAL 应用使用 Google 服务
【发布时间】:2015-01-14 15:35:51
【问题描述】:

我正在编写一个 PHP 应用程序来访问存储在 Google 地图引擎中的数据。我在 API 控制台中创建了一个 Web 应用程序的客户端 ID。因此,我可以通过Google API PHP client 授权我的应用访问我的 GME 数据。目前没问题。

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

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

但是问题来了:

当我使用之前的授权参数调用 ogr2ogr 时,它返回一个 HTTP 400 错误:尝试多次使用 OAuth2 授权码。看起来我传递的刷新令牌无效

深入研究问题,我发现了一些我不明白的地方:Google API 控制台允许您创建Web 应用程序的客户端 ID,但 可以客户端应用程序和服务器端应用程序之间没有区别。谷歌 OAuth2 文档使这一点与众不同:

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

所以,我的问题:

  • 我如何在 API 控制台中创建一个客户端 ID,我可以同时使用它:PHP 应用程序和 ogr2ogr 二进制文件(我已经使用 已安装应用程序的客户端 ID 测试了 ogr2ogr 二进制文件 它运行良好,但该客户端 ID 不能用于 PHP 应用程序)。
  • 为什么 API 控制台不会像文档那样区分客户端 Web 应用程序和服务器端 Web 应用程序的客户端 ID?显然,我误解了一些东西。例如,this tutorialWeb 应用程序的客户端 ID 用于 PHP 代码(但仅用于 Web 应用程序,而不用于调用也需要授权的另一个程序)

在此先感谢

【问题讨论】:

    标签: google-oauth gdal


    【解决方案1】:

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

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

    1. 只需将access=<your access token> 参数添加到与 ogr2ogr 一起使用的“文件名”(以“GME:”开头的字符串)。
    2. 您也可以使用 GME_ACCESS_TOKEN 环境变量。

    这将缩短 OAuth2 流程,并且程序实际上不会转到 AOuth2 身份验证流程,而只是重新使用您的 PHP 脚本生成的身份验证令牌。这是有效的,因为您是在同一台机器上并且在令牌过期之前发出请求。

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

    【讨论】:

    • 酷!我是否必须从主干更新 GDAL 并重新编译才能使用它?
    • 工作就像一个魅力!非常感谢!
    猜你喜欢
    • 2017-03-11
    • 2012-05-30
    • 2016-02-27
    • 1970-01-01
    • 2019-03-26
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多