我正在开发一个Android应用,我想限制访问我的网站和移动应用程序的API。我没有兴趣让用户登录我的应用程序,而是注册客户端。
我已经为这项任务补充了这些资源:
这是我到目前为止所做的:
制作一个常量类,将其添加到我的clientIds API声明中
clientId {android_key,web_key}&&观众{web_key,android_audiance}
为每个方法添加了用户用户参数
重建项目,已部署。
所有这些资源似乎都很有帮助,尤其是文档。但是,我没有发现任何差异。我希望看到,在我按照文档并重新部署后端后,我的网站和应用程序都无法调用我的端点功能。然而,他们都完美无瑕地工作。
关注这些帖子或文档会证明我的情况,还是还有其他我必须做的事情?我也不希望未经授权访问我的API资源管理器!
任何帮助将不胜感激!
编辑:
我使用了错误的密钥,我使用的是API密钥而不是CLIENT ID。一旦我更新了,我看到我的API请求失败,因为用户参数为空。现在我的问题是,如何在不让用户登录的情况下传递非null用户对象?
我尝试制作GoogleAccountCredintal并在我的Async任务中将其传递给我的ApiBuilder,但它始终为null。
GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(context,APIClientKeys.ANDROID_CLIENT_ID);
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), credential) ...
答案 0 :(得分:3)
一位非常聪明的网络开发者曾经说过
“永远不要相信客户”。
无论您使用多么复杂的机制来保护您的应用程序,只需要一个网络检查器(就像您可以在网络浏览器中找到的那样)和一个代码检查器(您也可以在网站上找到它) - 浏览器)。现在有些人可能会建议你对你的客户进行整合(那就是错误地修改代码,以至于有人不能只看到它)。但是,如果有人真的想要解除您的应用程序。他们将付出巨大努力,一旦成功逆向设计您的客户端,他们就可以编写自己的恶意客户端来滥用您的终端。
那么你能从现实中做些什么呢?
答案 1 :(得分:-1)
这个怎么样:
在您的服务器和您的应用上设置密钥。让我们说它是SECRETKEY123。在向您的API发出请求时,请发送一个名为auth的额外参数。在其中传递参数和密钥的md5(或任何其他,比如bcrypt)散列。 (注意:不应张贴密钥)
所以像auth = md5(param1 + param2 + SECRETKEY123);
然后在您的服务器上使用已存储在服务器上的密钥执行相同的哈希。比较两个哈希值 - 即您提交的哈希值和您在服务器上生成的哈希值。如果匹配允许访问 - 否则限制访问。