基于passport、express、nodejs的Metamask认证及适配库咨询
适配Hackathon Starter项目的Metamask登录实现方案
现成封装方案(无需自定义Passport策略)
- 直接使用已封装完成的
passport-metamask策略库,完全适配基于Node.js的Hackathon Starter项目模板,核心的签名校验、安全过滤逻辑都已经内置,不需要你从零实现策略逻辑
安装依赖:
只需要在你的Passport配置文件中引入该策略,补充用户查询/创建的回调逻辑即可,开发成本极低,也规避了自己写逻辑可能出现的签名伪造、重放攻击等安全问题npm install passport-metamask eth-sig-util ethereumjs-util
轻量替代方案(不想引入额外Passport依赖可选)
如果你的Hackathon Starter项目结构比较特殊,不想引入封装好的Passport策略,也可以用几十行代码实现安全登录,不需要写完整的自定义Passport策略:
- 前端先通过
@metamask/detect-provider检测用户钱包环境,请求授权获取用户钱包地址,向后端发起登录申请 - 后端生成唯一随机nonce,和用户地址绑定存储到缓存/数据库中,返回给前端
- 前端调用Metamask的签名接口,让用户对拿到的nonce进行签名,把签名结果、钱包地址一起提交给后端
- 后端通过
eth-sig-util.recoverPersonalSignature方法,用nonce和签名反推签名地址,和提交的钱包地址对比,一致则判定登录有效,下发会话凭证或者JWT即可
必守安全规则
- 所有nonce必须由后端生成,单次有效,用完立即销毁,禁止使用前端生成的nonce或固定nonce,避免重放攻击
- 签名校验逻辑必须放在后端执行,禁止前端校验通过就直接授予登录权限
- 存储用户钱包地址时统一转成小写或者EIP-55校验和格式,避免大小写差异导致同一个地址被识别为不同账号
内容的提问来源于stack exchange,提问作者Mohamed Lee
相关产品推荐
相关产品推荐

