Skip to content
阅读进度

Binder.getCallingUid 和 clearCallingIdentity 应该怎么用? ​

返回 Framework 与系统服务 目录

标准回答 ​

服务端应基于 Binder.getCallingUid 等真实调用身份校验权限和用户,不能只相信客户端传来的包名或 userId。权限检查通过后,若需要以系统服务自身身份执行内部操作,可以保存 clearCallingIdentity 返回的 token,并在 finally 中 restoreCallingIdentity。清除身份之前完成调用者检查,否则可能把无权限调用升级成系统身份。异步转到工作线程时,原始 Binder 调用上下文不会自然保留,我会显式保存需要的 UID 和用户信息。

延伸追问 ​

getCallingUid 不能在任意后台线程里直接当作最初请求者身份;传入的包名也要与 UID 关系匹配。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。