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