AccountManager 和签名检查
Posted
技术标签:
【中文标题】AccountManager 和签名检查【英文标题】:AccountManager and signature check 【发布时间】:2017-11-16 16:17:44 【问题描述】:Security tips与AccountManager
相关的章节提到:
如果凭据仅由您创建的应用程序使用,您可以 验证访问 AccountManager 的应用程序使用 checkSignature().
我应该在代码的哪里检查签名?我已经尝试使用Binder.getCallingUid(
) 在我自己的AbstractAccountAuthenticator
实现中获取调用进程的UID,但是当系统进程执行IPC 时它返回1000。我需要获取尝试访问我的应用创建的帐户的其他应用的 UID/包名称,因为我想在返回身份验证令牌之前执行 checkSignature
检查。
【问题讨论】:
【参考方案1】:事实证明它相当简单。真正调用者的包名、uid 和 pid 包含在作为参数传递的Bundle
中。此代码应驻留在AbstractAccountAuthenticator
的实现中。
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
String authTokenType, Bundle bundle)
try
PackageManager packageManager = context.getPackageManager();
String callerPackageName = bundle.getString("androidPackageName");
// Caller app must be signed with the same key to get the auth token
int signatureResult = packageManager.checkSignatures(BuildConfig.APPLICATION_ID,
callerPackageName);
if (signatureResult >= PackageManager.SIGNATURE_MATCH)
return [bundle with the auth token];
else
return Bundle.EMPTY;
【讨论】:
以上是关于AccountManager 和签名检查的主要内容,如果未能解决你的问题,请参考以下文章
通过 Google App Sign 更新客户经理和签名密钥