如何保护使用Google Cloud Endpoints构建的API?

mix*_*lan 21 google-app-engine google-cloud-endpoints google-cloud-platform

API是移动应用的后端.我不需要用户身份验证.我只需要一种方法来保护对此API的访问.目前,我的后端暴露无遗.

文件似乎只谈用户认证和授权,这是不是我需要在这里.我只需要确保只有我的移动应用程序可以与此后端进行通信,而不是其他任何人.

Tom*_*Tom 5

是的,您可以这样做:使用身份验证来保护您的端点,而无需进行用户身份验证。

我发现这种做法没有很好的记录,而且我自己也没有真正这样做过,但我打算这样做,所以当我看到一些 IO13 视频中讨论它时我注意到了(我认为这就是我的地方)看到了):

以下是我对所涉及内容的理解:

  • 创建一个 Google API 项目(尽管这并不真正涉及他们的 API,除了身份验证本身)。
  • 创建 OATH 客户端 ID,通过其包名称和您将用于签署应用程序的证书的 SHA1 指纹与您的应用程序绑定。

您将把这些客户端 ID 添加到端点的可接受 ID 列表中。您将向端点添加 User 参数,但由于未指定用户,因此该参数将为空。

@ApiMethod(
   name = "sendInfo",
   clientIds = { Config.WEB_CLIENT_ID, Config.MY_APP_CLIENT_ID, Config.MY_DEBUG_CLIENT_ID },
   audiences = { Config.WEB_CLIENT_ID } 
   // Yes, you specify a 'web' ID even if this isn't a Web client.
)
public void sendInfo(User user, Info greeting) {
Run Code Online (Sandbox Code Playgroud)

关于上述内容有一些不错的文档,此处: https ://developers.google.com/appengine/docs/java/endpoints/auth

您的客户端应用程序将在制定端点服务调用时指定这些客户端 ID。所有 OATH 详细信息都将在您的客户端设备上在后台处理,以便将您的客户端 ID 转换为身份验证令牌。

HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleAccountCredential credential = GoogleAccountCredential.usingAudience( ctx, Config.WEB_CLIENT_ID );
//credential.setSelectedAccountName( user );  // not specify a user
Myendpoint.Builder builder = new Myendpoint.Builder( transport, jsonFactory, credential );  
Run Code Online (Sandbox Code Playgroud)

这个客户端代码只是我最好的猜测 - 抱歉。如果其他人有关于客户端代码到底应该是什么样子的参考,那么我也会感兴趣。