Php 保护对应用程序引擎服务的访问

Php 保护对应用程序引擎服务的访问,php,security,google-app-engine,authentication,Php,Security,Google App Engine,Authentication,我有一个具有以下访问点的GAE java服务: 获取成本(id) 设置成本(id,新成本) 域名:myService.appspot.com 我还有一个前端php应用程序:frontend.different-domain.com 这将需要能够访问这两个端点。任何人都可以公开访问getCost,但我想知道如何保护setCost()端点,使其仅限于来自frontend.different-domain.com的请求 我想避免随机的人打电话给setCost,改变物品的价格 谢谢在您的情况下,最简单的

我有一个具有以下访问点的GAE java服务:

获取成本(id)

设置成本(id,新成本)

域名:myService.appspot.com

我还有一个前端php应用程序:frontend.different-domain.com

这将需要能够访问这两个端点。任何人都可以公开访问getCost,但我想知道如何保护setCost()端点,使其仅限于来自frontend.different-domain.com的请求

我想避免随机的人打电话给setCost,改变物品的价格


谢谢

在您的情况下,最简单的解决方案是在php前端生成签名,并将其与其他参数一起包含在请求数据中。然后,AppEngine服务自行计算签名,如果计算出的签名与您在请求中发送的签名匹配,则该请求被认为是真实的

您可以使用一些密钥生成签名,这些密钥只有php前端和应用程序引擎后端知道。我是Python程序员,所以我无法告诉您它在Java或php中的外观,但您需要执行以下步骤:

在php应用程序中:

  • 将您的机密与请求数据连接起来,例如
    secret\u KEYid5newCost537
  • 将签名计算为上面字符串的MD5哈希
  • 在请求中包含此签名
  • 应用内引擎应用程序:

  • 从请求数据中提取签名、id和新成本
  • 使用与php应用程序中相同的算法计算签名1(即密钥的MD5散列加上从请求中提取的数据)
  • 比较
    签名
    签名1
    。如果它们相等,则请求是真实的
  • 根据比较结果创建自己的逻辑
  • 这种技术与oAuth中请求签名的工作原理有点接近。有关更多信息,请参阅


    此外,如果你的用例比你的问题更复杂,你可以考虑使用.

    一个更简单的方法是使用X-AppEngult-InEndo-AppID标头: