时间:2022-03-22|浏览:391
用戶喜愛的交易所
已有账号登陆后会弹出下载
用以太坊登录 (Sign-In with Ethereum,SIWE) 颠覆了用户在互联网上的选择。
用户不再需要与一些大型中间商妥协,现在他们可以使用控制区块链账户的相同私钥直接登录 (不需要通过中间商)。SIWE,我们开辟了另一条道路,大公司不再剥夺用户访问服务的能力,也不再监控他们的行为。
SIWE 通过与 一起完全开放的认证标准dapp、app、公开讨论钱包、安全公司等社区成员。你可以在网站上 login.xyz 在上面找到所有的会议记录和笔记。这种方法与科技巨头或政府供应商的专有身份系统的封闭式开发非常不同。 (被隐私和数字权力倡导者抗议)。
相比之下,Sign-In with Ethereum (EIP-4361) 为以太坊账户定义了一种开放的知识共享 (creative commons,CC) 签名格式安全验证任何基于网络的服务。SIWE 以太坊基金会和 由社区建设ENS 直接支持, Spruce 从去年年底开始负责这个项目。我很高兴在这里讨论 用以太坊登录 的意义,以及 Web3 对于所有建筑商来说,它是如何超越 连接钱包 的?
连接钱包 vs. 用以太坊登录
连接钱包 这个按钮现在 dapp 的主要功能。点击此按钮,用户开始使用 Web3 与区块链互动的旅程。
通过连接钱包,应用程序可以知道你使用哪个账户;然而,仅此而已。你的钱包更容易知道你想用哪个账户与智能合同互动,发送加密货币,甚至通过 dapp 签署信息。连接钱包的功能非常简单 - dapp 对你没有记忆,只是为简单的交互搭建了一个平台。
当应用程序想要与用户进行更丰富的情境交互时(contextual interactions) 当我们加载用户偏好或隐私聊天信息时,我们首先需要确保我们与账户背后的实际私钥持有人交谈,而不是假装控制账户的人。连接钱包 不提供这种保证,但 SIWE 是的。换句话说,我们需要验证用户的身份,以便与他们建立 session,然后安全地读写他们的数据。为了说明两者的区别,我举了以下两个例子—— 连接钱包的 Carl 和建立 session 的 Sam:
(译者注:Session 是一种解决方案,用于在客户端和服务器端之间保持状态。其基本思路是: 客户端第一次访问时,服务器端生成 session id 回到客户端,当然服务器端也会把这个 session id 在内存中,客户端得到这个 session id 之后,这个 将在后续的每个请求中使用session id 传回服务器,让服务器查询自己的内存,知道客户端已经访问过了。Session 可用于实现用户登录认证。 由服务器端生成session id 传回客户端后,通常会保存在 cookie 中,所以 Session-based 认证也叫 Cookie-Based 认证。
Carl使用 dapp 并且有很好的体验。他可以在 Uniswap 交易, Aave 借钱,甚至 OpenSea 上购买 NFT。进行这几项操作只需要连接他的钱包。Carl 的操作一直很顺利,直到有一天,他遇到了这样的问题:他希望 dapp 能够记住他的一些情况,以便在他第三次、第四次和第五次使用这些 dapp 能给他更好的体验。
Carl如果 Uniswap 可自动导入他的优先清算权,Aave 能记住他最喜欢的贷款市场,甚至 OpenSea 能记住他的名字而不是 0x2Fe1a3... 这样的账户,他的经历会好很多。Carl 每次连接他的钱包,都要从头开始。
Sam 就不会有这样的问题了。Dapp 已认证并建立 session 之后,将保存相关信息。Sam 断开连接,重新认证,session 也会在他离开时继续,应用程序仍然记住与他有关的一切。他的信息甚至可以保存在他控制的远程数据库中。
使 SIWE 一元化
纵观 Web3 在这个领域,你会发现许多现有的服务提供某种形式的 "Sign-In with Ethereum",但是没有多少能达到标准。他们通常使用它与用户建立基于 的基础cookie 的 session,该 session 可以管理与账户相关的专有元数据。例如,如果您想在您的网站上定制用户权限的个人档案 (如 OpenSea ),您应该在用户可以做出任何更改之前验证他们的身份,以确保只有用户才能编辑自己的个人文件。工作流程如下:
连接钱包后的第一步是为用户提供人类可读信息,以便他们能够理解他们进行了什么交互。在许多情况下,用户看到 "LOGIN" (登录) 单词,或者一些让你登录的单词,有时甚至只是任何数字 (在这里,签随机疯狂的字母和数字集合)。相反,我们可以根据现有的实践确定一组必要的字段,设置许多良好的安全措施,以及在人类可读性和安全运行之间平衡的严格语法。此外,钱包不需要改变它们现有的界面和实践,至少可以继续为用户提供这些信息。
首先,我们可以接受所有这些混乱的 SIWE 信息,并以可接受的一般方式向用户提交请求:
共享信息 - 共享界面
在签名信息格式达成一致后,应用程序现在可以说与钱包相同的语言。当应用程序向用户提交签名请求时,钱包可以检查请求是否与 EIP-4361 (SIWE) 信息一致,让用户知道他们在登录一个网站。
此时,钱包可以呈现一个友好的程式化界面,让用户体验更好,不怀疑用户将采取什么行动。而不是给用户任何文本块签名。用户现在只需点击确认对话框登录,因为钱包可以理解 签名请求。为了完全透明,EIP-4361 规范中声明所有信息和字段仍然必须在其他子界面 (如详细视图) 中可用。
从 EIP-4361 在信息中,我们可以得到一个更清晰的界面:
该规范还向钱包引入了额外的安全要求,如引入域绑定,以防止钓鱼攻击;引入 nonces 为了防止重放攻击,用户在整个过程中得到了进一步的保护。例如,如果钱包发现了有效的 SIWE 信息,但用户对 example.com 签名 (但实际上是 exampie.com),钱包可以警告用户情况: