我们正在开发一个Rails中的
JSON REST API,供我们开发的
Android应用程序使用.有没有办法保护API,使其只能由我们的特定Android应用程序使用?
API是只读的,不涉及任何类型的用户相关或其他敏感信息.但在合理的范围内,我们希望防止滥用并将其限制仅限于我们的应用.
我可以轻松地向API添加身份验证令牌并将其与应用程序一起分发,但是:
>如果我们使用BASIC auth,我们可能不得不将API移到SSL.
>对于一个坚定的人来说打开Android APK二进制文件并揭开身份验证令牌可能是微不足道的.
这种情况看起来类似于咖啡馆在商店柜台上发布他们的WiFi密码 – 你必须把秘密告诉所有想要使用你服务的人,所以一开始就把它放在一边似乎毫无意义.
什么是最合理的方法?
解决方法
想要保护一个可能公开的未公开的API,以便它只能被一个应用程序访问,这意味着您希望阻止人们使用您决定使用API的API.
意味着会尽一切可能使用您的API的人.
如果不是这种情况,添加一个Auth令牌将不会是微不足道的,但对于偶然发现你的API的人来说至少是一个很大的垫脚石.实现这一点并不是一个非常糟糕的主意.
因为此身份验证不是基于用户的,而是基于应用程序的,并且您不希望身份验证依赖于用户输入.该请求必须由应用程序完全完成.
这意味着你必须这样做(添加硬编码令牌).只有你让一个坚定的人发现访问权限并请求令牌和方法非常困难.
这取决于具体情况,但我会选择SSL和硬编码令牌.
一些额外的安全:
>向应用程序发布访问令牌,只需要发送一个定期请求令牌.意味着人们拦截的机会越来越少硬编码请求令牌,但是基于会话的访问令牌到期.也许只为每个应用程序安装执行此操作.>在通过空中发送之前对此请求令牌进行编码.含义人们必须反编译你的应用程序.>混淆代码(使反编译更加困难).