如何安全地知道尝试连接到我的后端服务器的Android应用程序是我真正的应用程序?

时间:2016-09-02 10:18:45

标签: android security

我有连接到我的后端服务器的Android应用程序来获取数据。现在,它作为一个开放的API。

有人可以修改我的应用程序,仍然可以连接到我的后端服务器并获取数据。我怎样才能安全地阻止它?

换句话说,我希望只有我签名的APK能够从我的后端服务器获得服务。如何实现?

解决方案不应该依赖于登录用户。用户无需注册即可从服务器获取服务。

[编辑] 奖金问题:我在GIT中发布了我的应用程序的源代码。所以我没有太多选择隐藏源代码中的一些键。但我只想让我签名的应用程序能够连接到我的服务器。可能吗?

3 个答案:

答案 0 :(得分:1)

  1. 从您的应用中获取certificate fingerprint。关注this链接。此fingerprint是根据代码生成的,因此无法通过反编译apk来窃取。
  2. 您可以使用fingerprint发送此POST API,因为POST数据为encrypted
  3. 验证服务器上的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。