原标题:为什么「使用以太坊登录」具有革命性
撰文:Rocco
用户不再需要向一些大型中间商妥协,现在可以使用控制其区块链账户的同一个私钥直接登录(不需要经过中间商)。通过SIWE,我们开辟了另一条道路,大公司不再能剥夺用户访问服务的能力,也不能监视他们的行为。
SIWE是一个完全公开的认证标准,通过与dapp、app、钱包、安全公司等社区成员的公开讨论来实现。你可以在网站login.xyz上找到所有的会议记录和笔记。这种方法与科技巨头或政府供应商的专有身份系统的封闭式开发大相径庭(受到隐私和数字权力倡导者的抗议)。
相比之下,Sign-InwithEthereum(EIP-4361)为以太坊账户定义了一种开放的知识共享(creativecommons,CC)签名格式,以安全地验证任何基于网络的服务。SIWE由社区构建,获得以太坊基金会和ENS的直接支持,并且Spruce于去年年底开始负责该项目。我很高兴能在这里讨论「使用以太坊登录」的意义,以及对于Web3的所有构建者来说它是如何超越「连接钱包」的。
连接钱包vs.使用以太坊登录
「连接钱包」这个按钮是现在dapp的主要功能。点击这个按钮,用户就开始了与Web3和区块链交互的旅程。
通过连接钱包,应用程序可以知道你使用的是哪个账户;然而,仅此而已。你的钱包更容易了解你想用哪个账户来与智能合约互动、发送加密货币,甚至通过dapp对信息进行签名。连接钱包的功能非常简单——dapp对你「毫无记忆」,只是为简单的交互搭建了一个平台。
当应用程序想要和用户进行更丰富的情境交互(contextualinteractions)时,比如加载用户的偏好或隐私聊天讯息,我们首先需要确保我们是在和该账户背后的实际私钥持有者对话,而不是某个假装对账户持有控制权的人。「连接钱包」不提供这种保证,但SIWE可以。换句话说,我们需要对用户进行身份验证,以便与他们建立一个session,然后安全地读写他们的数据。为了说明两者的区别,我举了以下两个例子——连接钱包的Carl和建立session的Sam:
(译者注:Session在是一种用来在客户端与服务器端之间保持状态的解决方案。其基于思路是:客户端第一次访问时,服务器端生成一个sessionid返回给客户端,当然服务器端也会把这个sessionid存在内存中,客户端得到这个sessionid后,在后续的每个请求中会把这个sessionid传回服务器,这样服务器查询自己内存就知道这个客户端曾经访问过。Session可以用来实现用户的登录认证。服务器端生成的sessionid传回客户端后,往往会保存在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-InwithEthereum」,但没多少能达到标准的。他们通常会使用它来和用户建立一个基于cookie的session,该session可以管理该账户相关的专有元数据。比如,如果你想要给用户权限在你的网站上自定义他们自己的个人档案(像OpenSea那样),你应该在用户可以做出任何更改之前对他们进行身份验证,以确保只有用户可以编辑他们自己的个人档案。工作流程如下所示:
连接钱包后的第一步是给用户提供人类可读的消息,这样他们才能理解自己进行了什么交互。在很多案例中,用户看到的是「LOGIN」(登录)字样,或者一些让你登录的文字,甚至有时只是一个任意的数字(在这里,对这个随机的疯狂的字母和数字集合签名吧)。那么相反,我们可以根据现有实践确定一组必需的字段、设定好许多良好的安全措施和一个在人类可读和安全运行之间平衡的严格语法。此外,钱包不需要改变它们现有界面和实践,至少可以继续为用户提供这类信息。
首先,我们可以接收所有这些混乱的「SIWE」信息,并以一种可接受的通用方式向用户提交请求:
共享信息-?共享界面
对签名信息格式达成一致后,应用程序和钱包现在可以说同一种语言了。当应用程序向用户提交签名请求时,钱包可以检查该请求,检查它是否与EIP-4361(SIWE)信息相符,并让用户知道他们正在登录一个网站。
在这一点上,钱包可以呈现一个友好的程式化的界面,让用户体验更佳,并且不对用户将要采取的行动产生任何怀疑。而不是给用户一个任意的文本块来签名。用户现在只需点击一个确认对话框来「登录」,因为钱包能够「理解」签名请求。为了实现完全透明,EIP-4361规范中声明所有信息和字段仍然必须在其他子界面(如详细视图)中可用。
从EIP-4361的信息中,我们可以得到一个更清晰的界面:
该规范还为钱包引入了额外的安全要求,例如引入域绑定以防止钓鱼攻击;引入nonces以防止重放攻击,用户在整个过程中得到了进一步的保护。比如,如果钱包发现一个有效的SIWE信息,但是用户正在对example.com进行签名(但实际上是在exampie.com),钱包可以警告用户该情况:
身份验证之外
SIWE信息也可以被理解为访问特定资源的授权,或者对session私钥的委托,以提高dappUX的功能性和易用性。例如,想象一下,在这样一个世界里,用户可以使用他们保留的数据来丰富他们自己的session,而不是应用程序保存用户的数据。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。