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

问题描述 投票:21回答:3

API是移动应用程序的后端。我不需要用户验证。我只需要一种方法来保护对该API的访问。目前,我的后端已暴露。

documentation似乎只谈论用户身份验证和授权,这不是我在这里所需要的。我只需要确保只有我的移动应用可以与该后端通信,而没有其他人可以与之通信。

google-app-engine google-cloud-platform google-cloud-endpoints
3个回答
4
投票

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

[我发现这种方式并没有得到很好的记录,而且我自己实际上还没有做到,但是我打算这样做,所以当我看到某些IO13视频正在讨论这种方式时,我就非常注意(我认为那是我看到的地方):

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

  • 创建一个Google API项目(尽管除了身份验证本身外,它实际上并不涉及他们的API)。>>
  • 创建通过其程序包名称和您用来签署应用程序的证书的SHA1指纹与您的应用程序绑定的OATH客户端ID。
  • 您将这些客户端ID添加到端点的可接受ID列表中。您会将User参数添加到端点,但由于未指定用户,因此它将为null。

@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) {

这里有一些有关上述内容的不错的文档: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 );  

此客户代码只是我的最佳猜测-对不起。如果还有其他人可以确切了解客户端代码的外观,那么我也将很感兴趣。


2
投票

很抱歉,谷歌没有为您的问题提供解决方案(这也是我的问题)。您可以使用他们的API密钥机制(请参阅https://developers.google.com/console/help/new/#usingkeys),但是由于Google自己的API资源管理器(请参阅https://developers.google.com/apis-explorer/#p/),该策略存在很大漏洞,这是测试API的强大开发工具,但可以暴露所有Cloud端点API,而不仅仅是Google服务API。这意味着具有您项目名称的任何人都可以随意浏览和调用您的API,因为API资源管理器规避了API密钥安全性。我发现了一种变通方法(基于bossylobster对本文的强烈回应:Simple Access API (Developer Key) with Google Cloud Endpoint (Python)),该变通方法是在客户端API中传递不属于消息请求定义的请求字段,然后在API服务器中读取该字段。如果找不到未记录的字段,则会引发未授权的异常。这将填补API资源管理器创建的漏洞。在iOS(我用于我的应用程序)中,您可以向每个请求类(由Google的API生成器工具创建的类)添加一个属性,如下所示:


2
投票

该文档仅适用于客户。我需要的是文档有关如何在服务器端提供服务帐户功能的信息。

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