对于我目前正在开发的项目,我需要将servlet(托管在Google App Engine上)公开给托管在Google Compute Engine上的Java可执行文件(在同一项目中)。这样的servlet执行一些维护任务,所以它永远不应该由未经授权的用户触发。因此,目标是授权来自运行JAR可执行文件的Google计算引擎实例的请求。
在过去,我通过在HTTPS上公开servlet并依赖“共享机密”解决了同样的问题,AppEngine应用程序和计算引擎实例上运行的JAR都知道这一点。这样,实例调用特定的servlet(公共的),然后servlet验证机密是否正确,如果正确,则允许请求。
我不喜欢这种方法。当然,我们可以使用质询-响应身份验证或其他身份验证过程(可能通过非对称加密签名)做得更好。然而,这不是我想做的。
获得相同结果的首选方法是使用计算引擎默认服务帐户。我确信有一种方法可以在计算引擎上创建HTTP POST请求,并通过默认的服务帐户密钥进行身份验证。然后,在servlet上,我将依赖UserService来检查请求是否来自ComputeEngine默认服务帐户,如果是,我将接受这一点。
然而,我还没有看到任何文档或代码示例来解释如何做到这一点。我怀疑有可能使用默认的计算引擎服务Sccount执行经过身份验证的HTTPRequest(可能添加承载JWT令牌作为授权头?)。
有人试过这样的吗?