我有连接到我的后端服务器的Android应用程序来获取数据。现在,它作为一个开放的API。
有人可以修改我的应用程序,仍然可以连接到我的后端服务器并获取数据。我怎样才能安全地阻止它?
换句话说,我希望只有我签名的APK能够从我的后端服务器获得服务。如何实现?
解决方案不应该依赖于登录用户。用户无需注册即可从服务器获取服务。
[编辑] 奖金问题:我在GIT中发布了我的应用程序的源代码。所以我没有太多选择隐藏源代码中的一些键。但我只想让我签名的应用程序能够连接到我的服务器。可能吗?
答案 0 :(得分:1)
certificate fingerprint
。关注this链接。此fingerprint
是根据代码生成的,因此无法通过反编译apk
来窃取。fingerprint
发送此POST API
,因为POST
数据为encrypted
。SHA
,如果匹配则请求来自您的应用。答案 1 :(得分:1)
您可以在服务器上验证您想要保护的API调用的certificate signature/private key(包含在.keystore或.jks文件中)。
1)在您的API中嵌入您应用的签名。
2)通过应用程序的API调用将签名作为参数发送。
3)检查运行时的签名是否与嵌入式开发人员签名匹配,并相应地回复您的请求。
您可以通过以下方式获取签名运行时:
class Location extends Model
{
public function network()
{
return $this->hasMany('App\Network');
}
}
class Network extends Model
{
public function owner()
{
return $this->hasOne('App\Owner');
}
}
答案 2 :(得分:0)
通过唯一的客户ID或设备ID区分您的应用程序访问。每当您的应用程序发出请求时,请在服务器端验证这些ID。