今天的主角是SoLiD,一个可能会改变互联网的开源项目。如果你感兴趣也可以自己去看看。

前景

我曾经说过我对信息孤岛是嗤之以鼻的,各大互联网厂商都在筑起一堵高墙,用户的数据被死死的控制在他们手里,但是另人搞笑的却是层出不穷的大厂数据泄露事件,这种双标的行为属实是令人有点难蹦。很多用户为了对抗选择了不上传个人数据,例如联系方式、照片或者视频等等。但还是有非常多的用户习惯了“裸奔”,一部分原因是无所谓,也有可能是他们认为躲不掉。例如你在淘宝上买了一个东西,不出意外的在抖音、B站、QQ空间等各种可能插入广告的地方出现同类型产品广告。这就是大数据分析吧,一方面筑起数据高墙搞信息孤岛,另一方面又把用户数据当成商品出售,却不征求用户的许可。哦不,其实早已征得用户的许可了,因为在注册软件时用户会被要求同意用户许可协议,否则就无法使用(doge。

这严重违背了万维网之父蒂姆-伯纳斯-李(Tim Berners Lee)的初衷。他认为万维网应该是自由的,所有使用万维网的用户都能平等的享受万维网带来的便利,然而却被互联网寡头肆意使用,因此伯纳斯-李很早就已经意识到了万维网的缺陷,并提出了SoLiD相关的概念,并在2017年正式启动了SoLiD项目。这正是今天的主角。

万维网是1989年蒂姆-伯纳斯-李提出的基于超文本传输协议(HTTP)的服务器程序,旨在让全球的计算机设备都能互联互通。而互联网是针对各种硬件设备(比如手机、电脑、手表、车机以及服务器等)的,它的涵盖范围比万维网要大,通信协议也比单纯的HTTP更复杂。

SoLiD是什么?

SoLiD 是 社交互联数据(social linked data)的缩写。2018年,伯纳斯-李组建了一家名为Inrupt的创业公司,SoLiD是他们的核心项目,而公司的宗旨是“使互联网重新去中心化”,这完全符合他们的初衷。可这同时也意味着要向互联网寡头宣战,这注定是艰巨且不平凡的任务。

SoLiD规定了一种叫做 Linked Data(互联数据)的数据格式,使用叫做RDF(资源描述框架 Resource Description Framework)的语法来书写,并将该数据存储在名为Pod(个人在线数据库 Personal Online Data Stores)的终端上。这个终端可以是你部署在家里的小型服务器,也可以是公司的服务器,或者是你信得过的第三方厂商提供的服务器。通过这种方式,用户可以自由的选择自己的数据保存在哪个地方,并且可以设置任何人对数据的读/写/控制权限。也就是说,你可以完全掌控自己的数据,谁能看,谁能修改,谁能控制读写权限,都是可以自由配置的。web应用或者app可以通过集成官方提供的SDK进行用户的身份认证/鉴权,以及对可访问数据的增删改查。注意这里我没有说“对自己的数据进行增删改查”,而是“对可访问数据进行增删改查”,因为只要我允许,任何人都可以编辑我的数据,包括第三方app。

SoLiD与Web3.0的区别

千万不要把SoLiD和现在的Web3搞混淆了,它们之间存在着显著区别:

特性

SoLiD

Web3.0

核心目标

用户数据控制权和隐私保护

去中心化的互联网和经济体系

技术基础

基于现有的Web标准(如RDF、Linked Data)

基于区块链和智能合约

数据存储

数据存储在用户控制的Pod中,去中心化但并非分布式

数据分布在区块链节点上,完全分布式

数据控制

用户完全控制自己的数据

数据一旦上链,不可更改或删除

隐私性

用户决定谁可以访问数据

数据通常公开透明,几乎没有隐私性

应用场景

个人数据管理、社交网络、去中心化应用

金融交易、供应链、去中心化金融(DeFi)

身份管理

使用WebID实现去中心化身份验证

使用区块链地址作为身份标识

互操作性

基于Web标准实现应用互操作性

基于区块链协议实现跨链互操作性

这里的互操作性可以理解成是应用和应用之间相互访问数据。

SoLiD是如何实现去中心化的?

实现去中心化的最典型的特征就是使用全局唯一ID来登录各种网站和app,在SoLiD中用WebID(全称是WebID URI)来表示,形式是一串URL,比如:https://id.inrupt.com/xxxxxxxx

而这个URL所指向的位置就是用户的 WebID Profile 档案,该文件符合Linked Data格式,用来表述用户身份,包括用户名和头像、用户的个人网站或其他有关档案的地址、公钥证书或其他身份凭证的列表。这里有个关键的数据就是公钥,原因是SoLiD默认采用的是TLS鉴权,所以用户需要保留一个私钥文件,与之对应的公钥就会保存在Profile档案中。但是在后续版本后官方使用OIDC(OpenID Connect)验证令牌的方式来作为首选方案,所以在安全性和便携性上有了很大提升。

OpenID Connect(OIDC)是一个基于Internet的标准身份验证协议,它建立在OAuth 2.0授权框架之上。通过OIDC,第三方应用可以安全地认证用户并获取到用户的WebID Profile档案,同时保证用户的登录过程安全和简洁。

好吧,铺垫了这么多,是时候讲点有意思的了。

相较于传统的Server/Client(Brower)架构,支持SoLiD的客户端(网站或App)不需要通过API去指定的后端服务器获取数据,而是去访问各种各样的Pod,比如用户的头像保存在Pod A,用户的个人信息保存在Pod B,而发布的文章保存在Pod C,那么app只需要去访问对应的链接,但前提是数据的所有者允许你访问你才能访问。好吧前面的例子有点夸张,一般来说注册这种app时,我们只需要提供身份提供商(IDP,需要满足Solid OIDC规范),软件就会进行鉴权流程(跳转到IDP的登录界面),完成鉴权后就会去获取用户的 WebID Profile 档案,从而去获取其他的数据。所以对用户来说,只需要记住自己是在哪里注册的,即IDP。

如果用户不喜欢使用官方自带的或者第三方的提供商,可以自己部署官方提供的ESS(Enterprise Solid Server),ESS集成了各种服务包括但不限于:访问授权服务、授权服务、Pod服务、WebID服务等等。当然ESS本身已经集成了兼容OpenID Connect(OIDC)的身份提供商,只需要完成正确的配置即可。除此之外用户还可以在IDP的管理界面进行新增/删除Pod、以及配置各个Pod的访问控制策略 (ACP) 等其他各种操作。

这里需要强调说明一下,SoLiD的目的是使互联网重新去中心化,所以App除了可以访问你的Pod,也可以访问别人的Pod,并不是说因为配置了你的IDP就不能访问别人的数据了,在SoLiD眼里,任何资源都只是一串链接(严格来讲是兼容Linked Data格式的数据),只要开放权限控制就能让所有人访问。

好吧,你会说这样有什么用?还是说太麻烦了不想用?事实的确如此,SoLiD从2017年启动到现在这么多年一直都不温不火,或者说是国内不怎么火,github star也有8k+,但是就目前来看SoLiD生态依然不容乐观,开发人员没有动力制作 Solid Apps,因为没有用户,而用户不想使用 Solid 是因为没有可用的APP,形成了恶性循环。但是依然有一大批开发者在坚持围绕SoLiD展开工作和开发,我能从他们身上看到一股精神:或许是受够了互联网寡头的垄断和一而再再而三的数据泄露事件,又或许是对自己的数据有着强烈的控制权,再或者是对使互联网重新去中心化这一信念坚信不疑。SoLiD的路还有很远很远,很多人说SoLiD注定不可能成功,这里引用一位国外开发者的话:

这一切都取决于你对成功的定义。如果你对成功的唯一定义是完全和绝对的统治,那么是的,也许 Solid 注定要失败。但是,如果您认为对某些人有用就足够了,那么我们正在实现这一目标。

我想这正是这位开发者不顾他人异样目光也要坚持下去的信念吧。互联网是应该变天了,这群互联网寡头早已狼狈为奸,我们不可能指望他们能知错能改,唯一的办法就是发展自己的生态,让用户的数据重新回到用户自己手里,这也许才是真正意思上的Web3.0。即便最后SoLiD没有成功,我想还会有第二个SoLiD和第三个SoLiD,还会有一大批开发者加入到这场战斗。我们期待在未来的某一天,网站和软件的用户协议里不会再有“用户只拥有账号的使用权”。

自我介绍