gpt4 book ai didi

android:验证 Intent 发送者的身份

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:45 27 4
gpt4 key购买 nike

我在一家生产多个应用程序的公司工作,但并非所有这些应用程序都具有相同的签名或更相似的签名,我们目前至少有 5-6 个应用程序证书。

我们试图创建一种机制,使同一设备上公司的所有应用共享相同的是,例如,如果用户从市场应用程序 A 安装但没有安装应用程序,将生成一个新的 ID,如果现在他安装应用程序 A,应用程序 B 应该与应用程序 A 具有相同的 ID(ID 只是生成的 UUID 类型 #4)等等……

我们目前正在使用广播,只有经过我们许可的应用程序才能接收该广播并通过另一个广播发回 id(这次是明确的)。广播和响应在我们的签名级别许可下受到保护,这当然无济于事,因为我们有不止一个签名。

我尝试编写一个 Intent 广播和恢复,它可以拥有自己的保护机制,不仅限于一个签名,而是多个签名,问题是像 Binder.getSenderUID() 这样的东西不适用于广播和我有自己的 uid。看起来我无法获得我的 snder 的身份,除非他自己在 Intent 中写下他的 ID,这不是我可以信任的东西,因为它很容易被伪造。使用加密要求应用程序附带一个 key ,这不再是安全的,转向服务器进行验证需要太多时间,而且在移动设备上不能保证成功,因为不能 100% 确定周围有网络。

任何人都知道如何从一个应用程序到另一个应用程序获取验证\安全消息?(我所有的应用程序,但可能具有不同的签名)。

最佳答案

一如既往,这里有一个具有挑战性的问题,我从来没有得到正确的,如果有的话!答案,所以我不得不自己找到它。

Intents 的问题是无法获取发送者,因为它们与发送者地址不重要的网络中的多播并行。

如果我想获得 snder 的 UID,我需要创建一个“远程”进程,即使他是本地的,而不是使用广播 IPC,我需要使用 AIDL 和 IBInder 实现。一旦我有了一个 Binder 对象,我就可以调用我的服务 getCallingUid() 并获取调用者的 uid,这将允许我要求 PackageManager 给我它的公共(public)证书(不询问进程本身,我询问操作系统)并进行比较它到我在 apk 中预先准备的一组证书。

另一端的调用应用程序(向我发送它的 ID 的另一个进程)只需使用 bindService(service, conn, flags) 方法绑定(bind)到我。这种方法的缺点当然是耗时的过程,Bind 需要时间,它是一个通过内核的异步调用,不如绑定(bind)到本地服务快。此外,由于我可能有多个应用程序,我需要同步访问我的内部 ID,因此只有第一个没有失败的绑定(bind)调用才会为我设置和 ID。我仍然需要检查我是否可以使用 Messanger 方法来防止多线程问题。

希望这对其他人有帮助。

关于android:验证 Intent 发送者的身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517820/

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