gpt4 book ai didi

android - Android 应用程序之间的安全通信

转载 作者:太空狗 更新时间:2023-10-29 16:41:21 25 4
gpt4 key购买 nike

我有两个 Android 应用程序,应用程序 A 和应用程序 B。

这两者必须以安全的方式相互通信。我在应用程序 A 中为此定义了一个自定义权限。应用程序 B 使用该自定义权限。如果我将 protectionLevel 设置为“normal”,这会正常工作,但这似乎并不安全,因为任何人都可以使用该权限。

真正安全的唯一方法是,如果我可以将 protectionLevel 设置为签名。遗憾的是,我有以下限制:

  • App A 必须使用 Cert A 签名
  • App B 必须使用 Cert B 签名
  • 应用程序 B 也可以使用证书 A(即 A 和 B)进行签名,但那样做根据 this source 似乎也没有带我去任何地方

有什么办法可以让它发挥作用吗?如果不是(我猜是这种情况):

什么是确保只有应用程序 B 可以与应用程序 A 通信的好方法?

最佳答案

情况一:App A 和 App B 使用不同的 key 签名时,你至少可以通过你的广播监听器查看调用包名称。

@Override    
Public void onReceive(Context context, Intent intent) {
Uri packageNameUri = intent.getData();
String packageName = packageNameUri.getSchemeSpecificPart();
If(packageName.equals(“<App_A or App_B packageName>”){
//Access granted, execute what you need!
}
else{
//deny access
}
}

不要忘记在 Android list 文件中声明您的广播接收器:

<receiver android:name="<your_receiver_class " >
<intent-filter>
<action android:name="<give it any name>"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>

情况 2:当两个应用使用相同的 key 签名时。

如果您还想共享 Linux 用户 ID,请确保这两个应用使用相同的 key 签名并在 list 文件中添加以下属性:

android:sharedUserId="<provide dot separated name e.g. “android.shared.uid”">

强制执行基于签名的权限的一种方法是在 list 中创建自定义权限,如下所示:

<permission android:name="org.securecom.permission" android:protectionLevel="signature"></permission>

<activity
android.permission="org.securecom.permission"
...
</activity>

这样,您就可以静态配置组件并强制执行基于签名的权限。

也可以通过您的广播监听器进行动态检查:

@Override
public void onReceive(Context context, Intent intent) {
Uri packageUri = intent.getData();
String packageName = packageUri.getEncodedSchemeSpecificPart();
int flags = PackageManager.GET_PERMISSIONS | PackageManager.GET_SIGNATURES;
try {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName,flags);
// verify packageInfo
} catch (NameNotFoundException e) {
// handle
}
}

我已经测试了基于签名的权限,它运行良好。

希望这对您有所帮助。

关于android - Android 应用程序之间的安全通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17279092/

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