题目
产品希望在用户首次进入时请求更多权限,并假定「连接过一次就一直有效」;与此同时,钱包侧的授权可能被用户撤销。请说明 EIP-2255 的权限模型与 EIP-1102 的授权原则,并给出前端在授权变化时的状态处理方案。
考察目标
- 理解权限对象的请求、查询与生命周期。
- 说清
eth_requestAccounts与权限模型的关系。 - 处理授权撤销与钱包支持度差异。
用权限对象模型解释连接、授权与撤销的关系,给出前端在撤销与支持度差异下的状态处理方案。
产品希望在用户首次进入时请求更多权限,并假定「连接过一次就一直有效」;与此同时,钱包侧的授权可能被用户撤销。请说明 EIP-2255 的权限模型与 EIP-1102 的授权原则,并给出前端在授权变化时的状态处理方案。
eth_requestAccounts 与权限模型的关系。EIP-2255 把钱包能力建模为可请求、可查询的权限对象,对应 wallet_requestPermissions 与 wallet_getPermissions;EIP-1102 的原则是页面在用户显式授权之前拿不到账户,eth_requestAccounts 可以理解为请求 eth_accounts 权限。权限由钱包侧维护,用户可以撤销。实现差异与工程取舍见深入回答。
【协议保证】EIP-2255 把钱包能力抽象为权限对象:wallet_requestPermissions 用于显式请求,wallet_getPermissions 用于查询当前授权(依据:EIP-2255 §Specification)。
【协议保证】eth_requestAccounts 可以理解为请求 eth_accounts 权限的一种形式(依据:EIP-2255 §Specification、EIP-1102 §Specification)。
【协议保证】EIP-1102 的原则是页面在用户显式授权之前不暴露账户(依据:EIP-1102 §Specification)。
【协议保证】权限状态由钱包侧维护,用户可以撤销;前端通过查询接口或状态变化通知获知当前状态(依据:EIP-2255 §Specification)。
【实现行为】各钱包对 wallet_requestPermissions、wallet_getPermissions 的支持程度不同;以 MetaMask Connect 的 JSON-RPC API 文档为例,可以查看其公开支持的方法集合(依据:MetaMask Connect EVM JSON-RPC API 页面)。
【工程经验】把「连接过」与「当前仍被授权」分开处理:每次进入需要授权的流程前查询一次权限或账户状态(依据:工程经验,无规范依据)。
【工程经验】避免在首次进入时索取超出当前功能的权限;权限请求与用户可见的功能入口对应,便于用户理解(依据:EIP-2255 §Specification 的权限对象化思路;工程经验)。
【工程经验】撤销或账户变化后,清理与该账户绑定的本地缓存,并让服务端会话重新验证(依据:工程经验,无规范依据)。
【工程经验】对不支持权限方法的钱包准备降级路径:退回账户请求流程,并保持界面状态一致(依据:工程经验,无规范依据)。
wallet_requestPermissions 与 wallet_getPermissions 的作用。eth_requestAccounts 与权限请求的关系,并说明授权可以被用户撤销。发现这道题有问题? 反馈此题