保护REST API以供Android客户端使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保护REST API以供Android客户端使用相关的知识,希望对你有一定的参考价值。

我们正在开发一个Rails中的JSON REST API,供我们开发的android应用程序使用。有没有办法保护API,使其只能由我们的特定Android应用程序使用?

API是只读的,不涉及任何类型的用户相关或其他敏感信息。但在合理的范围内,我们希望防止滥用并将其限制仅限于我们的应用。

我可以轻松地向API添加身份验证令牌并将其与应用程序一起分发,但是:

  1. 如果我们使用BASIC auth,我们可能不得不将API移到SSL。
  2. 对于一个坚定的人打开Android APK二进制文件并且无论如何都要发现身份验证令牌,这可能是微不足道的。

这种情况看起来类似于咖啡馆在商店柜台上发布他们的WiFi密码 - 你必须把秘密告诉所有想要使用你服务的人,所以一开始就把它放在一边似乎毫无意义。

什么是最合理的方法?

答案

想要保护一个可能公开的未公开的API,以便它只能被一个应用程序访问,这意味着您希望阻止人们使用您决定使用API​​的API。

意味着会尽一切可能使用您的API的人。

如果不是这种情况,添加一个Auth令牌将不会是微不足道的,但对于偶然发现你的API的人来说至少是一个很大的垫脚石。实现这一点并不是一个非常糟糕的主意。

因为此身份验证不是基于用户的,而是基于应用程序的,并且您不希望身份验证依赖于用户输入。该请求必须由应用程序完全完成。

这意味着你必须这样做(添加硬编码令牌)。只有你让一个坚定的人发现访问权限并请求令牌和方法非常困难。

这取决于具体情况,但我会选择SSL和硬编码令牌。

一些额外的安全:

  • 向应用程序释放访问令牌,只需要定期发送请求令牌。意味着人们更少机会拦截硬编码的请求令牌,但是基于会话的访问令牌会过期。也许只为每个应用程序安装执行此操作。
  • 在通过空中发送之前对此请求令牌进行编码。意味着人们必须反编译你的应用程序。
  • 混淆代码(使反编译更加困难)。

以上是关于保护REST API以供Android客户端使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用CORS保护REST API?

如何使用 CORS 保护 REST API?

如何使用 Keycloak 保护前端和 REST API

使用 Spring Security Rest 插件保护 Grails Rest Api

使用 OAuth2 客户端凭据流保护用 PHP 编写的 REST API

使用 OAuth2 保护单体私有 REST api? [关闭]