2012-03-02 92 views
1

我有以下接入点的GAE Java服务:安全访问应用程序引擎服务

getCost(ID)

setCost(ID,newCost)

域:myService.appspot .COM

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

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

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

感谢

回答

0

在你的情况下,最简单的可能的解决办法是,生成在PHP前端签名并将其包含在请求数据以及其他参数。然后,您的AppEngine服务会自行计算签名,如果计算出的签名与您在请求中发送的签名相匹配,则该请求被视为真实的。

您使用一些秘密密钥来生成签名,该密钥仅为您的php前端和App Engine后端所知。我Python程序员,所以我不能告诉你如何会看在Java或PHP,但您需要执行以下步骤:

在PHP应用程序:

  1. 请求数据串连你的秘密,例如SECRET_KEYid5newCost537
  2. 将签名计算为以上字符串的MD5哈希值。
  3. 在请求中包含签名。

在应用程序引擎应用程式:

  1. 提取signature,从请求数据idnewCost
  2. 使用与php应用程序中相同的算法(即秘密密钥加上从请求中提取的数据的MD5哈希)计算signature1
  3. 比较signaturesignature1。如果它们相同,则请求是真实的。
  4. 根据比较结果创建您自己的逻辑。

该技术与oAuth中的请求签名方式有些接近。有关更多信息,请参阅oAuth documentation

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

相关问题