仅允许我的 Android 应用程序在 java 中执行端点 API

我创建了端点API,但问题是任何拥有我的项目ID的人都可以转到api资源管理器并执行这些api。我只将Android客户端ID(使用调试密钥库)放在端点类声明之上,但我仍然可以进入隐身模式并执行api。如何限制API,以便只有我的Android应用程序可以访问,并且所有其他应用程序都将被抛出,但有一些例外?


答案 1

可以通过添加密钥参数来保护 API,该参数必须正确才能调用 API。如果 API 的用户不知道密钥,则即使使用 API 资源管理器,他也将无法使用 API。

这种方法的优点是它很容易做到,如果需要,可以自己试验API。

缺点包括很容易被一个坚定的用户规避,只需查看流量即可。


答案 2

您需要确保已正确编码 API/后端,以便仅接受应用的 clientId;确保在 API 类的@Api注释中看不到其中一个 clientIds:com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID

@Api(
  name = "myApi",
  version = "v1",
  clientIds = {<your android clientId>},
)
public class myApi {
  // your API code here
}

如果 API 资源管理器客户端 ID 存在,它将允许它从 API 执行 API。我不是100%确定,但我认为您可能仍然会看到您的API在没有客户端ID的情况下从资源管理器中形成,但是执行将被阻止并出现错误。

本文包含更多信息: https://cloud.google.com/appengine/docs/java/endpoints/auth#Specifying_authorized_clients_in_the_API_backend

如果特别敏感,您可能需要考虑在端点调用周围放置适当的身份验证(即围绕每个方法进行每用户身份验证检查)。只需将 User 参数添加到@ApiMethod就足以强制用户在执行每个方法之前进行身份验证。

希望有所帮助。