14

我创建了端点apis,但问题是任何人都可以使用我的项目id进入api explorer并执行这些apis。我只在终端类声明的顶部放置了Android客户端ID(使用调试密钥库),但仍可以进入隐身模式并执行apis。我怎样才能限制apis,只有我的android应用程序有访问权限,其他所有人都会抛出一些异常?只允许我的android应用程序执行java中的端点api

+0

您可否详细说明以下几点: 您正在使用哪个Google API? 您将访问哪些数据? (用户数据与应用数据) –

+0

看看Dropbox等如何处理认证。需要初始登录才能获取API密钥并锁定https通信。 – zaph

回答

3

可以通过添加必须正确调用API的关键参数来保护API。如果API的用户不知道密钥,那么即使使用API​​ Explorer,他也将无法使用该API。

这种方法的优点是操作简单,如果您需要,您可以自己尝试API。

缺点包括很容易被确定的用户绕过,只是通过查看流量。

+1

没有任何标准的谷歌建议这样做的方式? – user531069

1

您可以在每个API allowed_client_ids上使用ANDROID_CLIENT_ID,这可能是一种可能的解决方法。

我认为如果你没有按照它尚未这可能帮助:https://cloud.google.com/appengine/docs/python/endpoints/auth#Python_Creating_OAuth_20_client_IDs

+0

我的代码中有clientIds = {}。这是同样的事情吗? – user531069

+0

您可以在API端点装饰器中使用'allowed_client_ids'和'audiences'来限制您的apis对特定客户端id的使用,尝试阅读 - **在我上面共享的链接中指定API后端**中的授权客户端 – Codetoend

+0

可以看看这个[link](http://android-developers.blogspot.in/2013/01/verifying-back-end-calls-from-android.html)如果它解决了这个目的。 – Codetoend

2

你需要确保你已经正确编码您的API /后端只接受你的应用程序中的clientId;确保你做看到com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID上的API类在@Api注释中的clientId之一:

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

如果API Explorer客户端ID存在,它会允许它执行你的来自API的API。我不是100%肯定的,但我认为你仍然可以看到你的API形式的浏览器没有客户端ID,但执行将会阻止一个错误。

这篇文章有详细信息:https://cloud.google.com/appengine/docs/java/endpoints/auth#Specifying_authorized_clients_in_the_API_backend

你可能要考虑把适当的权威性周围的端点调用(大约每一种方法,即每个用户的身份验证检查),如果它是特别敏感。只需将User参数添加到@ApiMethod就足以让强制用户在执行每个方法之前进行身份验证。

希望有所帮助。

+0

正如我所提到的,我已经有了clientIds = {}代码 – user531069

1

为此,使用对称密钥加密和数字签名。不过,您需要先与Android应用分享密钥。

下面是它的工作原理。

每当Android应用正在网络请求,你把网址&的参数,那么你哈希,然后使用共享的私有密钥加密。然后您将签名作为另一个参数追加到URL中。

在接收端,您的Web API将验证请求是否来自您的Android应用程序。

请注意,这将只适用于您的应用程序。这将无法正常工作,以此来捕获所有通用的Android请求/

0

以下是一些值得考虑的要点:

云端点一直支持Android客户端ID和 包签名,所以应该ATLEAST采取关心的事实, 只有签署从你身边的Android应用程序可以访问 端点

如果您想从接入删除Web客户端,那么我会 可能考虑的HTTP头和代理,看看是否有识别这些网站clients.However的 肯定的方式,这将 要求你写你自己的授权逻辑的方法 ,因为我不相信端点的基础设施可以为您

自动利用这一 照顾。如果你想使用API​​浏览器来测试 了API的快捷方式通过注解为大家

删除访问可能是 问题。所以请保持API Explorer访问可用。

相关问题