【问题标题】:Limit access to my endpoints to my Android app only限制对我的端点的访问仅限于我的 Android 应用程序
【发布时间】:2017-11-02 19:26:03
【问题描述】:

我是 Google App Engine 的新手,我正在尝试制作我的第一个引擎并将其连接到我的 Android 应用程序。我已经浏览了本教程以了解它:

https://cloud.google.com/endpoints/docs/frameworks/legacy/v1/java/helloendpoints-android-studio

我让它工作正常。我可以从我的 android 应用程序访问我的应用程序引擎,并获得所需的响应。问题是,我想将我的 API 的端点仅限于我的应用程序的用户。

这是我的 API 方法(来自教程),就目前而言,每个人都可以访问我的 api 资源管理器并在其中执行方法,只要他们登录到任何 Google 帐户即可。

我希望用户只能从我的应用程序中执行此方法。

这是我的应用引擎 java 文件:

package com.example.Barda.myapplication.backend;

import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.config.ApiNamespace;
import com.google.api.server.spi.response.UnauthorizedException;
import com.google.appengine.api.users.User;

import javax.inject.Named;

/**
 * An endpoint class we are exposing
 */
@Api(

        name = "myApi",
        version = "v1",
        clientIds = {Constants.ANDROID_CLIENT_ID},
        audiences="firebase-wiki-race.appspot.com",
        namespace = @ApiNamespace(
                ownerDomain = "backend.myapplication.Barda.example.com",
                ownerName = "backend.myapplication.Barda.example.com",
                packagePath = ""
        )

)
public class MyEndpoint {
    /**
     * A simple endpoint method that takes a name and says Hi back
     */
    @ApiMethod(name = "sayHi")

    public MyBean sayHi(@Named("name") String name) throws UnauthorizedException {

      //  if (user == null) throw new UnauthorizedException("User is Not Valid");

        MyBean response = new MyBean();
        response.setData("Hi, " + name);
        return response;
    }

}

这是常量类:

package com.example.Barda.myapplication.backend;

/**
 * Contains the client IDs and scopes for allowed clients consuming your API.
 */
public class Constants {
    public static final String ANDROID_CLIENT_ID = "*********************.apps.googleusercontent.com";

}

我使用我的应用程序的 SH-1 和包名称 ANDROID_CLIENT_ID 生成。


我在网上搜索了很多,也阅读了博客和主题,但我无法让它发挥作用。这是可能的事情吗?我究竟做错了什么?

【问题讨论】:

    标签: android api google-app-engine google-cloud-platform


    【解决方案1】:

    您需要遵循adding authorization to the API backend 上的文档指南。在此过程中,您定义了一个授权使用您的 Endpoint 的客户端列表。

    完成后,您可以按照来自 Android 的 making authenticated calls 上的指南进行操作。

    【讨论】:

    • 我是否必须使用经过身份验证的调用才能仅允许来自我的应用程序的调用?我已阅读您发送的第一个链接,它在我的代码中。你确定第二个链接对于我想要做的事情是必要的吗?而且,在第一个链接中写道:“对于 Android 应用程序,您必须在 clientIds 中提供其 Android 客户端 ID 和 Web 客户端 ID”,但我没有 Web 客户端,只有 Android 应用程序。跨度>
    • 是的,限制对 API 的访问的唯一方法是使用一种身份验证形式。话虽这么说,您可以create a service account 并通过您的Android 应用程序对其进行身份验证using a private key。第二个链接中的代码仅提供了一个示例,说明如何进行经过身份验证的调用。最后,您需要在 Android 的基础上为 Android Audience 创建一组 Web 客户端凭据,这是必需的。
    • 我不知道我的 Web 客户端 ID 是什么,但我在这里找到了答案:stackoverflow.com/a/34158187/7483311 这是我缺少的部分。我已经关注了这两个链接并且它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2019-07-15
    • 2018-09-02
    • 2015-07-17
    • 2020-01-22
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多