gpt4 book ai didi

android - facebook 如何使用 key 哈希验证应用程序的真实性?

转载 作者:IT老高 更新时间:2023-10-28 23:06:34 24 4
gpt4 key购买 nike

使用 facebook 开发 Android 应用程序时,您需要将应用程序的 key 哈希上传到他们的网站。有了这个,他们声称他们能够验证对其服务器的调用实际上是从您的应用发出的。

我已阅读此问题 How does Facebook verifies mobile apps但它并没有真正提供这个的实际实现。我已经尝试查看 facebook 库的源代码,但无法弄清楚。

哪些数据是从 android 应用发出的,以及可以根据服务器中的此哈希验证的加密方式? facebook实现的方法是fail safe吗?

如果是,并且它可以在任何服务器中实现,我可以使用它来验证我的服务器是否没有使用不同的代码重新编译我的应用程序(这种情况经常发生:()


我目前正在以这种方式实现这个想法:

Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(),     PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs) {
verifyInServer(sig.hashCode());
}

verifyInServer 是使用存储的签名值对服务器进行检查的伪代码。它现在已经工作了,但我不确定它是否安全,我宁愿检查一个 key 哈希(它的公共(public))而不是这个签名数据(我不确定它是否是私有(private)的并且 不是可被用户欺骗)。

最佳答案

@Zbysek 的回答可能是正确的,因为 Facebook 应用程序很可能是实际执行验证的应用程序。没有这个应用程序的源代码很难确定,但我们可以通过检查 Facebook API 库项目的源代码推断出一些事情,特别是 AuthorizationClient 中编码的登录过程和Session 类。

  1. 首先,客户端验证 Facebook 应用程序本身已正确签名。这是意料之中的,因为您不会想要将您的登录凭据提供给冒充的应用Facebook。这是在 NativeProtocol 类中完成的(也在Facebook 类,用于已弃用的方法)。这是API 中唯一提及的签名,因此如果有额外的验证,它们要么由 Facebook 应用程序本身完成,要么在服务器中完成。

  2. Session.open() 最终会创建一个 AuthorizationClient 来尝试一系列可能的处理程序。其中一个(第一个使用,如果 SessionLoginBehavior 允许的话)是 Facebook 应用程序本身(例如使用 KatanaLoginDialogAuthHandler,但还有其他的)。

  3. 这些 AuthHandler 对象最终使用 tryIntent() 调用 startActivityForResult() 来调用 Facebook 应用程序本身。

所以,总结一下,登录过程:

  • 验证 Facebook 应用是否合法,
  • 最终在 Facebook 应用中调用 Activity,
  • 通过 FB 应用程序 ID 和其他一些数据调用它,
  • 来自应用内的 Activity,通过 startActivityForResult()

这是一个关键部分,因为以 startActivityForResult() 开始的 Activity (但不是那些以 startActivity() 开始的 Activity )可以使用 getCallingActivity()知道调用者的身份(包和类名)。

因此,Facebook 应用程序可以轻松地使用此信息来查询 PackageManager,获取 您的 应用程序的签名,将该数据与应用程序 ID 一起传递给服务器,然后验证它们是否匹配。由于 Facebook 应用程序本身已签名,因此您的应用程序可以信任此结果。

我承认这都是猜测,但鉴于我们所知道的,这似乎是合理的:)

不幸的是,这也意味着您不太可能复制此机制以供您自己使用以保证真实性。除非您是 Facebook 或 Google(Google Play 服务具有类似的签名验证功能,例如用于 map ),或者可以以某种方式确保您的第二个应用程序也可以在每台设备上使用。

关于android - facebook 如何使用 key 哈希验证应用程序的真实性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23985965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com