为Dapp提供合适的EOS验证身份信息
简述下Extension和Dapp身份认证过程。
Dapp获取EOS帐号身份大致流程如下
开始分析流程
参考Scatter获取身份的流程(Scatter 身份获取部分代码),Dapp对于身份的验证规则如下
如果Dapp配置了所需网络的chain Id,则计算返回为("${this.blockchain}:"+"chain:${this.chainId}").toLowerCase()
如果没有配置chain Id,则计算返回 ("${this.blockchain}:"+"${this.host}:${this.port}").toLowerCase()
Dapp匹配身份有两种方式
- chain id
- 所需网络的地址和端口。
对于只有所需网络的地址和端口的,先根据地址和端口通过RPC获取对应的chain idgetinfo
然后Extension统一根据chain id查询对应的账户信息中选中的账号信息,以及从对应chain id网络信息中找到选中的网络信息。
然后将账户信息和网络信息创建成一个身份返回给Dapp.
补充
- 针对于网络信息,所在的chain id,并不可靠,所在的地址有可能会切换链,所以要先有验证的逻辑(根据地址查询chain id
getinfo
,判断是否相同)。 - 针对于账户信息,所存的权限,也不可靠,因为非owner可能被owner修改或者删除掉,所以非owner权限要实现验证逻辑。(通过账户所在chain id,从网络信息中找对应的网络地址,通过
getaccount
,返回中查看permissions
对应权限是否存在,并且公钥是否与私钥生成的公钥一致)