只允许我的android应用程序执行java中的端点api
我创建了端点apis,但问题是任何人都可以使用我的项目id进入api explorer并执行这些apis。我只在终端类声明的顶部放置了Android客户端ID(使用调试密钥库),但仍可以进入隐身模式并执行apis。我怎样才能限制apis,只有我的android应用程序有访问权限,其他所有人都会抛出一些异常?只允许我的android应用程序执行java中的端点api
可以通过添加必须正确调用API的关键参数来保护API。如果API的用户不知道密钥,那么即使使用API Explorer,他也将无法使用该API。
这种方法的优点是操作简单,如果您需要,您可以自己尝试API。
缺点包括很容易被确定的用户绕过,只是通过查看流量。
没有任何标准的谷歌建议这样做的方式? – user531069
您可以在每个API allowed_client_ids
上使用ANDROID_CLIENT_ID,这可能是一种可能的解决方法。
我认为如果你没有按照它尚未这可能帮助:https://cloud.google.com/appengine/docs/python/endpoints/auth#Python_Creating_OAuth_20_client_IDs
我的代码中有clientIds = {
您可以在API端点装饰器中使用'allowed_client_ids'和'audiences'来限制您的apis对特定客户端id的使用,尝试阅读 - **在我上面共享的链接中指定API后端**中的授权客户端 – Codetoend
可以看看这个[link](http://android-developers.blogspot.in/2013/01/verifying-back-end-calls-from-android.html)如果它解决了这个目的。 – Codetoend
你需要确保你已经正确编码您的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,但执行将会阻止一个错误。
你可能要考虑把适当的权威性周围的端点调用(大约每一种方法,即每个用户的身份验证检查),如果它是特别敏感。只需将User参数添加到@ApiMethod就足以让强制用户在执行每个方法之前进行身份验证。
希望有所帮助。
正如我所提到的,我已经有了clientIds = {
为此,使用对称密钥加密和数字签名。不过,您需要先与Android应用分享密钥。
下面是它的工作原理。
每当Android应用正在网络请求,你把网址&的参数,那么你哈希,然后使用共享的私有密钥加密。然后您将签名作为另一个参数追加到URL中。
在接收端,您的Web API将验证请求是否来自您的Android应用程序。
请注意,这将只适用于您的应用程序。这将无法正常工作,以此来捕获所有通用的Android请求/
以下是一些值得考虑的要点:
云端点一直支持Android客户端ID和 包签名,所以应该ATLEAST采取关心的事实, 只有签署从你身边的Android应用程序可以访问 端点
。
如果您想从接入删除Web客户端,那么我会 可能考虑的HTTP头和代理,看看是否有识别这些网站clients.However的 肯定的方式,这将 要求你写你自己的授权逻辑的方法 ,因为我不相信端点的基础设施可以为您
自动利用这一 照顾。如果你想使用API浏览器来测试 了API的快捷方式通过注解为大家
删除访问可能是 问题。所以请保持API Explorer访问可用。
您可否详细说明以下几点: 您正在使用哪个Google API? 您将访问哪些数据? (用户数据与应用数据) –
看看Dropbox等如何处理认证。需要初始登录才能获取API密钥并锁定https通信。 – zaph