作者:Olaoluwa Osuntokun

来源:https://lightning.engineering/posts/2020-03-30-lsat/

原文首发于 2020 年 3 月30 日

今天,我们要宣布一个重磅消息,我们已经发布了闪电网络服务鉴别令牌(Lightning Service Authentication Tokens, LSAT)规范的草案。LSAT 是面向由 Lightning Labs 开发的身份验证和付费 API(使用互联网上最好的货币:比特币!)的新型协议标准,使用了尚未普及的 HTTP 402(要求付款)状态码。LSAT 既可以用于付费 API 的身份验证,又可以作为付款机制(类似于门票)。有了 LSAT,任何服务或业务都可以在免费和订阅之间增加一层付费 API:自带计量方式,无需登录、电子邮箱或密码。除了这个规范,我们还发布了 Aperture,一个使用了 HTTP 402(要求付款)的 LSAT 反向代理实现,现已由 Lightning Loop 正式采用。我们可以使用 Aperture 轻松创建一个支持 LSAT 的新型付费 API 或服务,甚至无缝 升级 现有的网络资源或 API 以支持 LSAT,创建一个从现有网络通往基于闪电网络的新型网络的入口。

我们可以将 LSAT 看作是一种新型身份验证令牌或 cookie。不同于一般的 cookie,LSAT 是可以通过密码学方式验证的不记名凭证。LSAT 令牌的所有功能都在一个 macaroon 文件内 编码,这样的 macaroon 文件只能由终端服务商创建。LSAT 规范将 HTTP 和闪电网络相结合,为新一代基于闪电网络的付费 API 创建了无缝的端到端付款 + 身份验证流程。

我们将在下文探索 LSAT 的目标、由来和工作流。我们还将探究 Aperture 是如何参与 Lightning Loop 运作的,以及它的初始功能。如果有读者想要了解更多细节,我们建议开发者和其他相关人员阅读完整的 LSAT 规范草案。规范本身是开源的,诚挚欢迎贡献者加入!

LSAT

被遗忘的 HTTP 错误码

我们如今所熟知的 HTTP 使用了大量错误码,以便开发者轻松使用用户在网络上创建的 API 和资源。例如,200 OK 错误码表示 HTTP 响应成功。当客户端试图访问服务器却无法找到的网页或资源时,会返回 404 Not Found 。此外还有很多错误码,部分错误码更常用一些。其中,有一个非常冷门的错误码 402 Payment Required。顾名思义,当客户端在未付款的情况下访问需要付费的资源时,会返回该错误码。在 HTTP 规范的大多数版本中,错误码 402 Payment Required 都被标记为“以备后用”。很多人猜测该错误码的初衷是应用于数字现金或小额支付方案。然而,在 HTTP 规范的初版草案发布时,这类方案尚未诞生。

但是,几十年过去了,我们真的有了广泛使用的数字现金系统:比特币。除此之外,一个面向小额付款的新型网络诞生了:闪电网络。在 Lightning Labs 成立之初,我们就发现了闪电网络在打造计量型付费 API 上的潜力。我们已经使用闪电网络解决了付款部分,接下来的挑战是创建一个协议来以简单可扩展的方式使用 现有 API。我们的解决方案正是 LSAT 协议

基于闪电网络的新型网络的身份验证和 API 付款

闪电网络有望成为访问网络服务和资源的标准支付方式。在这个新型网络中,用户不会被铺天盖地的网络广告滋扰,也无需泄露自己的电子邮箱,让自己一辈子遭受垃圾邮件的跟踪轰炸;付费购买一项服务后,用户能够获得一张可用于认证和访问的票据或收据,这样岂不是好?

在闪电网络中,电子邮箱和口令已经过时了。用户只需购买并出示 密码学不记名凭证 以访问服务和资源。在这个新型网络中,信用卡不再是网络上已经创造出的所有美好体验的“守卫”。有了 LSAT,我们能够创建出一个更全球化、更私密、对开发者更友好的新型网络。

HTTP + Macaroons + Lightning = LSAT

LSAT 本质上是通过闪电网络获得的票据,可用于访问特定的服务或资源。票据编码了自身能够访问的资源(可能还有更多!)。你可以复制票据或将它们送给朋友让他们访问对应资源。你送给朋友的票据可以是 弱化 过的,这样你的朋友就只能访问低一档的资源(例如,不超过 480p 的流媒体视频)。另外,服务端可以为特定用户铸造特殊票据,调换、升级,甚至作废票据。

实际上,票据本身就是 macaroon。macaroon 是一种灵活的 API 凭证标准,Ind 已经将它用作默认的身份验证机制。LSAT 协议让用户可以通过闪电网络使用比特币以 原子 方式购买票据。当用户试图访问需要付款(402 Payment Required)并提供闪电网络 发票 的资源时,就会通过 HTTP(或 HTTP/2)收到非完整 LSAT 。只要用户支付发票并获得付款原像(支付到付款哈希的发票:payment_hash = sha256(pre_image)),即可将非完整 LSAT 转化成完整 LSAT。

只要合理整合到客户终端、闪电网络钱包、移动应用、浏览器(和扩展程序)上,上述流程有可能比用户如今习惯的信用卡流程更加丝滑。不仅如此,它在隐私性方面也更胜一筹,因为服务器不需要知道是谁支付了票据,只知道是否支付成功。如果你想看看这个支持 LSAT 的新型网络是什么样子,欢迎查看由 Oliver Gugger(我们的架构工程师之一)创建的演示。该演示使用 Joule 让用户可以无缝体验闪电网络上的“最佳”节点。

示例应用和应用场景

有了 LSAT 标准,我们就可以将闪电网络作为主要支付通道,创造出大量新型应用场景、定价模型和应用。由于 LSAT 标准也是在 HTTP/2 上定义的,我们可以自然而然地对其进行扩展,以支持对现有 gRPC 服务的门禁访问。这就是 LSAT 的强大之处,它可以将身份验证和支付逻辑从应用逻辑中分离出来。Lightning Loop 正是通过这种方式使用 LSAT,为用户提供一种轻量级身份验证机制。

由于 LSAT 的支付功能是利用闪电网络实现的,使用 LSAT 创建计量型 API 也很容易。计量型 API 支持随用随付的支付方式,无需用户预先付款。开发者可以使用 LSAT 创建应用,以随用随付的方式向用户提供计算、文件托管或磁盘空间等资源。如果用户停止付费,他的资将被停用、收回,并重新分配给其他付费用户。由于 LSAT 标准支持的 gRPC 支持双向流式 API,我们甚至可以创建一种计量型付费流媒体视频或音频服务!

此外,LSAT 还可以带来在 API 架构方面的创新。自动化层升级就是其中一个例子。很多 API 通常会提供多个层,让用户通过升级层的方式访问更多或额外的资源。通常情况下,用户必须 手动 导航至网页来请求升级到更高的层,或降级到更低的层。使用 LSAT 标准可以轻松实现自动层升级:用户通过命中一个新的端点获得一个升级的 LSAT,该 LSAT 编码了额外功能或与前一层相比更高的资源访问权限。服务甚至可以利用 LSAT 进行 A/B 测试,即,向不同的子用户集提供不同的 LSAT,用户将不同的 LSAT 提交给服务会得到略有差别的资源或服务。

Aperture:通往基于闪电网络的新型网络的入口

看到这里,你是不是很想为 LSAT 协议带来创新,并基于闪电网络开发新一代网络服务?那你运气不错,我们已经公开了 Aperture 的代码。Aperture 是我们开发的支持 LSAT 的反向代理实现,目前已在我们的生产系统中投入使用。Aperture 介于 API 服务器或网络资源与网络本身,能够无缝处理身份验证协议、macaroon 铸造和验证,以及付款验证。使用一个简单的基于 YAML 的配置文件,用户就可以轻而易举地创建支持 LSAT 的网络服务,或升级现有网络服务以支持 LSAT。Aperture 的初始版本支持针对目标服务的 macaroon 铸造、能够限制用户可访问路径/资源的 LSAT、会过期的 LSAT(例如,资源的访问有效期只有 1 天)、代理 REST 和 gRPC 调用,甚至天然支持通过 Tor 公开服务!Aperture 的默认存储后端是 etcd ,这个可靠的分布式键值对存储在 Kubernetes 等多个项目中发挥着重要作用。

我们计划在接下来几个月继续开发 Aperture,增加更多功能,并推广部署,让 Aperture 得到更广泛的应用。我们还在 Aperture 的议题追踪器中添加了容易实现的目标和长期目标,以便贡献者积极参与进来。

结论

在本文中,我们已经介绍了 LSAT:一种新型网络身份验证和付费 API 标准。LSAT 协议使用闪电网络进行付款,并将 HTTP-420 和 macaroon 结合起来用于身份验证和防伪造。得益于 LSAT 协议,我们有希望基于闪电网络创建一个更全球化、更私密、更具可扩展性的网络。我们欢迎社区审查我们最近发布的规范,为 Aperture 带来创新。我们期待看到开发者利用 LSAT 与我们的辅助工具带来令人惊叹的开发成果!

(完)