最近一直在研究SIWE,老实说,它对任何需要正确用户认证的Dapp开发者来说都是一个游戏规则的改变者。让我来拆解一下我学到的内容。



关于钱包连接的事情——是的,你可以将钱包连接到Dapp,但这并不能完全向后端证明所有权。你的地址是公开信息,对吧?理论上任何人都可以在API调用中声称自己是你。这就是以太坊登录(Sign-In with Ethereum)发挥作用的地方。它基本上是用你的钱包来加密证明你控制该地址,类似于你签署一笔交易。

什么时候值得实现SIWE?如果你的Dapp有用户账户或处理敏感数据,绝对值得。像Etherscan这样的只查询的应用可能不需要。但如果你在构建一个有真实用户系统的东西,SIWE就是正确的选择。

整个流程其实很简单——主要有三个步骤。首先,通过插件进行标准的钱包连接。然后你从后端请求一个Nonce(这可以防止重放攻击),用这个Nonce和一些其他数据(比如域名和链ID)构建一条消息,并通过钱包签名。最后,后端验证签名,确认Nonce匹配,然后给你返回一个JWT令牌,用于后续请求。

我一直在用Next.js和Ant Design Web3尝试实际实现。设置比我预期的还要简洁。你只需安装依赖,配置好Wagmi提供者和你的SIWE配置,然后就可以实现钱包连接和签名了。关键部分是Nonce端点(生成并存储一个与用户地址绑定的随机值)和验证端点(检查签名,验证Nonce是否匹配,然后发放JWT)。

让我惊讶的是——默认的RPC设置非常慢,验证签名大约要花30秒。切换到专用节点服务后,这个时间大大缩短了。如果要上线生产环境,这可是一个关键的优化。

当然,市面上的演示代码只是供学习使用。真正的生产环境需要正确的JWT处理、速率限制和其他安全措施。但核心的SIWE流程是稳固的,并且在整个生态系统中变得越来越标准。如果你认真想用正确的认证方式构建Dapp,这绝对值得理解。
ETH-1.02%
查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 转发
  • 分享
评论
请输入评论内容
请输入评论内容
暂无评论