我有一个GAE java服务,其中包含以下访问点:
getCost(ID)
setCost(ID,newCost)
在域名:myService.appspot.com
我还有一个前端php应用程序:frontend.different-domain.com
需要能够访问这两个端点。任何人都可以公开访问getCost,但我想知道如何保护setCost()端点以将其限制为仅来自frontend.different-domain.com的请求
我想避免随机的人调用setCost并改变事物的价格。
感谢
答案 0 :(得分:0)
在您的情况下,最简单的解决方案是在php前端生成签名,并将其与其他参数一起包含在请求数据中。然后,您的AppEngine服务会自行计算签名,如果计算出的签名与您在请求中发送的签名相匹配,则该请求将被视为可信。
您使用一些密钥生成签名,这只有您的php前端和App Engine后端才知道。我是Python程序员,所以我不能告诉你它在Java或php中的外观,但你需要执行以下步骤:
在php app中:
SECRET_KEYid5newCost537
在App Engine应用中:
signature
,id
和newCost
。signature1
(即密钥的MD5哈希加上从请求中提取的数据)。signature
和signature1
。如果它们相等,则请求是真实的。这种技术与oAuth中的请求签名工作方式有些接近。有关详细信息,请参阅oAuth documentation。
此外,如果您的用例比问题中所述的更复杂,您可以考虑使用oAuth with your Java application。
答案 1 :(得分:0)
更简单的方法是使用X-Appengine-Inbound-Appid标头:https://developers.google.com/appengine/docs/java/appidentity/#Java_Asserting_identity_to_other_App_Engine_apps