android应用程序之间的安全通信
我有两个Android应用程序,应用程序A和应用程序B 这两个人必须以安全的方式相互通信。 我在应用程序a中为此定义了自定义权限。应用程序B使用该自定义权限。如果我将protectionLevel设置为“normal”,那么这样做很好,但这似乎并不安全,因为任何人都可以使用该权限 如果我能将protectionLevel设置为signature,这将是唯一真正安全的方法。遗憾的是,我有以下限制:android应用程序之间的安全通信,android,security,Android,Security,我有两个Android应用程序,应用程序A和应用程序B 这两个人必须以安全的方式相互通信。 我在应用程序a中为此定义了自定义权限。应用程序B使用该自定义权限。如果我将protectionLevel设置为“normal”,那么这样做很好,但这似乎并不安全,因为任何人都可以使用该权限 如果我能将protectionLevel设置为signature,这将是唯一真正安全的方法。遗憾的是,我有以下限制: 应用程序A必须使用证书A签名 应用程序B必须与证书B签署 应用程序B也可以使用证书A(表示A和B)
- 应用程序A必须使用证书A签名
- 应用程序B必须与证书B签署
- 应用程序B也可以使用证书A(表示A和B)签名,但确实如此 我似乎哪儿也找不到,也是根据
什么是确保只有应用程序B可以与应用程序a通信的好方法?案例1:当应用程序a和应用程序B使用不同的密钥签名时,您至少可以通过广播侦听器检查呼叫者包名称
@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
}
}
我已经测试了基于签名的权限,效果很好
希望这有帮助
<receiver android:name="<your_receiver_class " >
<intent-filter>
<action android:name="<give it any name>"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
<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
}
}