首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保护App Engine终结点以进行服务器到服务器通信?

如何保护App Engine终结点以进行服务器到服务器通信?
EN

Stack Overflow用户
提问于 2015-02-01 13:43:34
回答 1查看 1.5K关注 0票数 2

我想保护App Engine上的API,以便它只能从另一个服务器(托管在App Engine之外)访问。

谷歌在这里解释了这一点,但只展示了如何使用客户端id来保护我的https://cloud.google.com/appengine/docs/java/endpoints/consume_js#adding_authentication_support_with_oauth_20,以便安卓、iOS和Webbrowsers/Javascript gapi进行专有访问。

我假设如果我想要使用REST访问API服务器到服务器,我将需要在App Engine控制台中创建一个“web应用程序的客户端ID”,然后在端点注释中指定客户端id……

代码语言:javascript
复制
@Api(
        name = "api",
        description = "API",
        namespace = @ApiNamespace(ownerDomain = "domain.com", ownerName = "Ownername")
        clientIds = { "clientidgoeshere" }
)

..。并将用户参数添加到端点:

代码语言:javascript
复制
public void restMethodName(

        @Named("serverurl") String serverUrl, // whatever parameters

        final com.google.appengine.api.users.User auth
) throws ServiceException, OAuthRequestException {
    if (auth == null) throw new OAuthRequestException("Unauthorized error message.");

// ...

}

到目前为止,我相信这一切都很好。如果服务器端实现不正确,请告诉我原因。

现在我的问题是:我不知道必须如何准备用户参数并将其传递给App Engine云端点框架以进行身份验证。

我正在寻找一种解决方案,我可以通用地使用任何语言,而不使用生成的云端点jar库,这通常是在Android上使用,只。

请描述我需要包装或签名的内容(可能是客户端机密),以及我需要将其放在https请求中的位置(可能在参数中),或者告诉我在哪里正确记录了整个云端点安全工作流程。

EN

回答 1

Stack Overflow用户

发布于 2015-02-01 16:06:05

您应该根据要在其上构建外部服务器上托管的应用程序的系统的SHA指纹,从开发人员控制台为web应用程序创建Client-Id。

然后将其包括在端点应用程序接口方法的允许客户端in列表中,以允许外部应用程序在方法定义之前使用@apiMethod注释访问端点应用程序接口:

代码语言:javascript
复制
@ApiMethod(name = "myEndpointMethod",
        clientIds = {"clientid1", "clientid2"})

public void myEndpointMethod(){
...
}

如果要对另一个App Engine应用程序进行身份验证,可以通过读取X-Appengine-Inbound-Appid标头并将其与允许发出请求的ID列表进行比较来检查传入请求的应用程序ID。

EDIT:似乎也可以使用App Engine在端点方法中注入的User对象来验证非Google帐户用户,但我从未这样做过。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28259885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档