我正在开发一个android应用程序,并且我想限制对我的API访问我的网站和移动应用程序。我不想让用户登录到我的应用程序,而是注册客户端。如何在没有用户登录的情况下保护我的端点API
我refrenced这些资源完成这个任务:
- how to make google endpoints inaccessible from the web?
- How do I protect my API that was built using Google Cloud Endpoints?
- https://cloud.google.com/appengine/docs/java/endpoints/add-authorization-backend
- How do I restrict Google App Engine Endpoints API access to only my Android applications?
这里是我做过什么迄今:
- 从Google云端控制台生成一个android和web客户端api密钥。它看起来是这样的:ALzfShCF_mD_IVlVVVf2783TG9FG8x7u0s-ZFQE(不是真正的关键)
做了一个常量类,添加了这些对我的的clientId
的clientId {android_key,web_key} & &观众{web_key,android_audiance}
API声明新增用户的用户参数去每个方法
重建项目,部署。
所有这些资源似乎很有帮助,尤其是文档。但是,我没有注意到任何区别。我期望看到,在我遵循文档并重新部署我的后端后,我的网站和应用都无法调用我的端点功能。但是,他们都完美无瑕地工作。
以下这些帖子或文档证明我的情况,还是有什么我必须做的?我也不希望未经授权访问我的API资源管理器!
任何帮助将不胜感激!
编辑:
我用错了键,我用的是API密钥,而不是客户端ID。一旦我更新,我看到我的API请求失败,因为用户参数为空。现在我的问题是,我怎么能不通过一个非空的用户对象而没有让用户登录?
我试着制作一个GoogleAccountCredintal并将它传递给我的ApiBuilder,但是它的值始终为空。
GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(context,APIClientKeys.ANDROID_CLIENT_ID);
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), credential) ...
这是云端点的标准吗? –
这种方法称为HMAC。我试图尽可能简单地描述。最标准的方法是使用oAuth我想 - 但我觉得这种方法更容易和优雅。您可以在这里阅读更多关于HMAC: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf –
谢谢,我会试试这个。 –