我创建了端点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访问可用。
- 1. 如何只允许我自己的应用程序访问我的API
- 2. 只允许从我自己的应用程序访问我的REST API?
- 3. 允许使用execvp执行程序
- 4. 允许通过移动应用程序和我的域只能访问REST API
- 5. 如何启用/允许Java在CefSharp应用程序中运行
- 6. 用户允许我的应用程序的许可权
- 7. 如何仅允许API访问android或ios应用程序(laravel)?
- 8. 仅限我的端点访问我的Android应用程序
- 9. 应用程序验证程序不允许启动我的应用程序
- 10. 如何获得Java应用程序中的确切执行点?
- 11. 只允许我的域内的特定节点端点的请求
- 12. 只允许某个UIGestureRecognizer一次执行
- 13. 允许onclick函数只执行一次
- 14. 只允许oracle db登录到特定的应用程序?
- 15. 只允许1个应用程序连接到特定的WiFi
- 16. 允许Wget只下载应用程序类型的PDF
- 17. 我不能在Android应用程序中使用google api java客户端YouTubeSample
- 18. Twitter API,也允许应用程序的追随者
- 19. 允许在iPhone应用程序中
- 20. 允许用户下载在线内容的Android应用程序
- 21. 如何允许两个线程以android中的预定义顺序执行?
- 22. 是我的MEF吗? (一个允许客户端应用程序插入的核心应用程序)
- 23. 在我的Android应用程序中执行adb shell命令
- 24. 从Android应用程序执行API的权限失败
- 25. Twitter OAuth API - 允许用户从应用程序撤销应用程序访问
- 26. Android - logcat中的奇怪错误不允许应用程序运行
- 27. Python自定义异常类应允许在程序执行后继续执行
- 28. 允许mvc5 c#webapi,以便只有我的应用程序可以访问它
- 29. 如何只允许一个用户运行我的C#程序,但也允许多个实例?
- 30. 如何允许客户端配置我的标签应用程序?
您可否详细说明以下几点: 您正在使用哪个Google API? 您将访问哪些数据? (用户数据与应用数据) –
看看Dropbox等如何处理认证。需要初始登录才能获取API密钥并锁定https通信。 – zaph