保护我的Google App Engine API端点

问题描述 投票:4回答:2

我最近在保护我的应用引擎方面做了很多研究。 目前,我一直在阅读以下问题以及该问题中的链接:

如何限制Google App Engine端点API只能访问我的Android应用程序?

但是,它没有回答我的问题。 我的问题类似于上面的问题,将我的端点API访问权限仅限于我的应用。 当他在凭证中输入正确的电子邮件时,这家伙似乎已经开始工作了。

我的问题是,如果我可以在不输入任何凭据的情况下获得相同的结果。 我想要它,以便只有我的应用程序可以使用我的端点API,以防止其他应用程序滥用它并使用我的配额。 我已经为我的Android应用程序获得了一个客户端ID,并将其放在我的@API注释中。 为了测试它是否有效,我在另一个api类的@API表示法中为客户端id创建了一个随机值。 但是,我的应用程序仍然可以使用这两个类中的方法。 有帮助吗?

-编辑-

从阅读文档和进一步研究,授权应用程序的端点方式是通过验证用户和我的API来检查用户是否为空。 我的问题是,在验证用户的过程中,Google是否能够以某种方式读取我的应用程序的SHA1指纹并将其授权给其客户ID列表? 如果是这样,我如何在我的端点中复制此过程,以便检查发出请求的应用程序的SHA1指纹并将其与设定值进行比较? 我不太了解端点背后的机制,所以如果我理解这个错误,请纠正我。

android google-app-engine google-cloud-endpoints
2个回答
2
投票

如果Android应用程序具有访问权限,则用户可以访问。 一个有动力的派对有很多选择来检查您的协议,包括将设备放在透明代理后面或只是通过调试器运行应用程序。 我建议在发布之前通过ProGuard运行你的应用程序,因为这会使这个过程变得更加困难。

最终,您需要使您的appengine API能够抵御不受信任的各方。 这只是网络的状态。


0
投票

您可以在此处描述如何保护端点API: http//android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html

秘诀是您使用以下范围从Google Play请求令牌:audience:server:client_id:9414861317621.apps.googleusercontent.com其中9414861317621.apps.googleusercontent.com是您的ClientId。

Google Play会在您的终端应用中查找ID,如果找到了ID,则会返回Google签名的JSON Web令牌。 然后根据您的请求传递该ID。 上面的文章说你应该把它传递给身体。 我可能宁愿为此添加另一个参数,因为否则你不能再传递自己的实体了。 无论如何,您的服务器后端会收到令牌,并且在您处理API请求之前,您会向Google询问其是否可信。

如果使用额外参数传入令牌,则可以通过将HttpServletRequest添加到端点签名,然后使用request.getHeader(“Yourname”)将其读出来在服务器端捕获它。 确保永远不要将参数添加为URL参数,因为它可能会记录在某处。

public void endpointmethod(

        // ... your own parameters here

        final HttpServletRequest request
) throws ServiceException, OAuthRequestException {
    request.getHeader("YourHeaderName") // read your header here, authenticate it with Google and raise OAuthRequestException if it can't be validated

在Android端,您可以在构建端点api时传递令牌,就像这样,因此您不必对每个请求执行此操作:

    Yourapiname.Builder builder = new Yourapiname.Builder(AndroidHttp.newCompatibleTransport(), getJsonFactory(), new HttpRequestInitializer() {
        public void initialize(HttpRequest httpRequest) {
            httpRequest.setHeader(...);
        }})

希望这有助于您确保端点API安全。 这应该。

© www.soinside.com 2019 - 2024. All rights reserved.