我确实有一个困扰我的问题。每当您使用像 Firebase 数据库这样的 Google API 时,您都会在创建时告诉端点允许使用它的应用程序包名称以及用于签署应用程序的证书的指纹。 现在,当您尝试从另一个应用程序(不同的包名称)使用 API 或更改签名证书(例如,从调试切换到发布)时,Google 将拒绝调用。
这让我想到了。 Google 如何在运行时知道签名证书指纹?
我们能否使用相同的机制通过检查指纹来保护自定义 API 端点? 获取包名很容易,没有什么可依赖的,但我对证书指纹很感兴趣。
我的目标是通过参数散列 + salt 和可能的时间戳以外的方式对服务器上的请求进行身份验证。
最佳答案
我对该主题进行了更多研究。事实证明,您可以像这样在运行时访问签名证书:
Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(),PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs) {
Log.i("App", "Signature : " + sig.hashCode());
}
关于android - 在自定义 API 调用上验证签名证书指纹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42627962/