【问题标题】:Using Google API Key with restriction in Android在 Android 中使用有限制的 Google API Key
【发布时间】:2020-08-14 13:19:05
【问题描述】:

在创建 Google Maps API 密钥时,我们可以应用以下四个限制:-

  1. IP 地址(Web 服务器、cron 作业等)。
  2. HTTP 引用 (Javascript)
  3. Andoid(用于 SDK)
  4. ios(适用于 SDK)

如果我们使用它们各自位置的钥匙,现在一切正常。

当我们想使用 REST 从移动设备(android/ios)访问某些 API 以获取附近的位置以供用户输入时,问题就出现了。现在在这种情况下哪种限制会起作用以及如何处理?

所有的限制我都试过了,还是不行。

提前致谢。

【问题讨论】:

    标签: android google-maps google-geocoding-api google-nearby map-api


    【解决方案1】:

    您可以通过在 https 调用的标头中传递 android 包名称和 sha-1 来限制 Android 应用程序的密钥并在我的应用程序中进行 http REST 调用:

      "X-Android-Package": "your.androidpackage.id"
      "X-Android-Cert": "0000000000000000000000000000000000000000"
    

    *请务必删除 sha 中的冒号 ':'。

    您仍然需要将“密钥”作为 url 参数传递和公开,但如果标头中没有凭据,它将被阻止。

    【讨论】:

    • 不要通过您的标头发送 SHA1 密钥!完全不安全
    • @EdgarKhimich 那么如何限制API呢?
    • 您可以对服务器上的密钥进行加密
    • 如果您使用 HTTPS,它是安全的,因为标头将被加密。实际上,SHA1 密钥可以通过 .apk 文件提取,因此无需担心。
    • 这救了我,伙计!感谢冒号删除提示
    【解决方案2】:

    如果我理解正确,您想从您的移动应用程序中使用 Places API 网络服务。通常,Google Maps API 网络服务应该从后端服务器调用,并且它们仅支持 IP 地址限制。

    我建议您阅读以下文章,了解可以为不同 API 设置的限制

    https://developers.google.com/maps/faq#keysystem

    如您所见,Places API Web 服务只能使用 IP 地址限制。直接从移动设备发送 Places API 请求没有多大意义,因为每个设备都有自己的 IP 地址,而您不知道用户设备的 IP 地址。因此,保护​​ API 密钥的唯一可行解决方法是创建中间后端服务器。

    应用应向您的中间服务器发送请求,中间后端服务器应向 Google 发送 Places API 请求,其中受保护的 API 密钥仅限于您服务器的 IP 地址,并将代理结果返回您的应用。

    在这种情况下,您需要两个 API 密钥。一种用于具有 Android 应用限制的 Google Maps Android SDK,另一种用于具有 IP 地址限制的 Places API 网络服务。

    我希望这会有所帮助!

    【讨论】:

    • 我理解你的意思,但我们已经在移动端编写了代码。所以我在想是否有一些解决方法。但仍然感谢您的回复。
    • 如果您想直接从手机发送请求,唯一的选择是使用不受保护的 API 密钥。并且此 API 密钥必须与您用于 Android Maps SDK 的密钥不同,因为 SDK 需要 Android 应用限制,并且无法与 Web 服务一起使用。
    【解决方案3】:

    Android/Ios 限制在这种情况下将起作用,将您的 SHA 放在所需的位置,然后将您的包名称放在 Android 上。它会起作用,还可以从控制台启用您正在使用的 api。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      相关资源
      最近更新 更多