题目
产品希望实现「连接钱包后自动登录」,初步方案是连接成功就把地址写入本地会话,后续请求带上该地址。请说明这个方案的问题,以及正确的登录流程应该包含哪些要素。
考察目标
- 连接与登录的边界。
- 签名挑战的要素与防重放设计。
- 会话与连接状态的生命周期管理。
用服务端挑战与地址签名证明控制权,再把会话与连接状态解耦。
产品希望实现「连接钱包后自动登录」,初步方案是连接成功就把地址写入本地会话,后续请求带上该地址。请说明这个方案的问题,以及正确的登录流程应该包含哪些要素。
连接只让页面获得钱包授权与地址;EIP-4361 把登录定义为:由地址对应的密钥对一条包含域名、地址、URI、chain-id、nonce 与时间的消息签名,依赖方验证签名与字段后确认控制权。nonce 由依赖方生成并做一次性校验,用于防止签名被重放。EIP-191 定义了签名数据的前缀格式,EIP-712 定义了结构化数据的哈希与签名方式。因此登录需要服务端下发挑战、用户签名、服务端验签后签发自己的会话。实现差异与工程取舍见深入回答。
发现这道题有问题? 反馈此题