Android 用于受信任应用程序的安全Rest API

Android 用于受信任应用程序的安全Rest API,android,rest,api,security,Android,Rest,Api,Security,我已经为我的Android应用程序创建了RESTAPI。所有API都使用OAuth2(密码授予类型)进行保护 用户提供用户名和密码,服务器验证凭据并发出访问令牌和刷新令牌,然后可用于调用API 现在这里的问题是API是公开的,对每个人都开放。我如何验证只有通过我的应用程序生成的呼叫才被接受 场景: XYZ是我的应用程序的用户,也是一个非常好的开发人员。他很好奇,弄明白了我的应用程序和API是如何相互作用的。现在他也有点雄心勃勃(我猜),决定创建自己的android应用程序(类似于我的应用程序),

我已经为我的Android应用程序创建了RESTAPI。所有API都使用OAuth2(密码授予类型)进行保护

用户提供用户名和密码,服务器验证凭据并发出访问令牌和刷新令牌,然后可用于调用API

现在这里的问题是API是公开的,对每个人都开放。我如何验证只有通过我的应用程序生成的呼叫才被接受

场景: XYZ是我的应用程序的用户,也是一个非常好的开发人员。他很好奇,弄明白了我的应用程序和API是如何相互作用的。现在他也有点雄心勃勃(我猜),决定创建自己的android应用程序(类似于我的应用程序),并使用我的RESTAPI。如何保护我的API不受这种使用的影响


我查看了其他几篇文章,但没有找到任何有用的方法来保护我的API不受这种使用。

至少从工程角度来看,您试图做的是不可能的。您可以使用各种工具混淆存储在应用程序中的机密(例如),但最终,无论您使用何种机制混淆机密,使用它们的设备都必须能够访问这些机密。您还可以采取其他步骤来增加反向工程应用程序所需的时间,例如经常以可能破坏反向工程客户端的方式更改API,或者推动强制更新以更改机密以及用于混淆这些机密的机制

然而,无论您做什么,一个有充分动机的用户都能够获得您在应用程序中分发的任何秘密

从法律上讲,您有更多的选择。您可以通过使用适当的EULA,使未经授权的应用程序无法合法访问您的API;看见如果您拥有您的服务提供的数据的版权,您可以阻止第三方在未经您许可的情况下在其他地方复制该数据,或者为此向第三方收取费用。可能还有其他法律选择;你需要咨询律师


但是为什么要麻烦呢?在开始这条路之前,也许你应该问问自己,为什么你首先要阻止其他应用程序访问你的API。如果用户觉得您的服务很有价值,但对您提供的客户非常不满意,并且愿意安装第三方应用程序来访问您的服务,那么您可能应该专注于改进您自己的客户,不要强迫用户使用他们显然不喜欢的客户端。

如果您的服务器如您所说实现了oauth2,那么任何应用程序都需要客户端id和客户端机密来访问您的api。因为我不允许其他人基于我的api创建应用程序。我的应用程序将具有clientId,该ID将用于验证应用程序,但如果有人将我的apk反编译为源代码,则可以发现该clientId。现在,如果有人发现了clientId,那么他可以创建一个应用程序来做与我的应用程序相同的事情。不可能让你的客户端无法破解,但你可以参考这个,了解一些使其更难的方法