保护对app引擎服务的访问

时间:2012-03-02 04:27:10

标签: php security google-app-engine authentication

我有一个GAE java服务,其中包含以下访问点:

getCost(ID)

setCost(ID,newCost)

在域名:myService.appspot.com

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

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

我想避免随机的人调用setCost并改变事物的价格。

感谢

2 个答案:

答案 0 :(得分:0)

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

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

在php app中:

  1. 将您的秘密与请求数据连接起来,例如: SECRET_KEYid5newCost537
  2. 将签名计算为上面字符串的MD5哈希值。
  3. 在请求中包含此签名。
  4. 在App Engine应用中:

    1. 从请求数据中提取signatureidnewCost
    2. 使用与php app相同的算法计算signature1(即密钥的MD5哈希加上从请求中提取的数据)。
    3. 比较signaturesignature1。如果它们相等,则请求是真实的。
    4. 根据比较结果创建自己的逻辑。
    5. 这种技术与oAuth中的请求签名工作方式有些接近。有关详细信息,请参阅oAuth documentation

      此外,如果您的用例比问题中所述的更复杂,您可以考虑使用oAuth with your Java application

答案 1 :(得分:0)