19个版本 (11个重大更新)
新增 0.12.0 | 2024年7月31日 |
---|---|
0.10.2 | 2024年5月8日 |
0.9.0 | 2024年3月17日 |
0.8.0 | 2023年7月20日 |
0.3.0 | 2020年11月10日 |
200 在 身份验证
2,037 每月下载
在 5 crate 中使用
1.5MB
2.5K SLoC
提供程序存档
在WASI规范包括强大的网络支持并且可用的WebAssembly工具(例如wasm3、wasmtime等)支持此WASI规范,以及Rust编译器能够在编译“常规”套接字代码时生成正确的WASI导入集之前,我们对于可移植能力提供程序的支持将受到限制。
在没有有用的可移植能力提供程序的情况下,我们需要存储、检索和调度本地能力提供程序的能力。本地能力提供程序是一个存储在二进制文件中的FFI插件,该文件针对特定的CPU架构和操作系统。这些二进制文件(Linux上的共享对象文件)的问题是我们不能像在WebAssembly文件中那样将这些安全声明JWT嵌入其中。使用组件时,我们使用这些签名令牌获取一个可验证的全局唯一公钥(身份)以及相关文件的哈希值,以验证自签名以来文件是否已被篡改。
为了提供存储、检索、调度以及签名服务提供者功能的能力,我们需要一个服务提供者归档(PAR)。这是一个简单的TAR文件,包含一个已签名的JWT,以及每个支持的操作系统/处理器组合的二进制文件。
服务提供者归档文件格式
每个服务提供者归档文件包含一个根目录下的claims.jwt
文件,该文件保存一组已签名的声明(见附录)。此外,归档的根目录中还包含二进制文件,这些文件包含原生能力提供者可执行文件的字节,文件名格式为[架构]-[操作系统].bin
。
以下是一个服务提供者归档文件内容的示例
+ provider_archive.tar
|
+---- claims.jwt
|
|---- x86_64-linux.bin
|---- aarch64-linux.bin
|---- x86_64-macos.bin
`---- aarch64-ios.bin
在我们获得创建支持强大能力提供者功能(如数据库客户端、Web服务器、原始TCP或UDP控制等)的具有网络功能的WASI模块的能力之前,Gantry将存储和检索每个能力提供者的par文件。
附录A - 架构值
以下是一些可能的架构列表(注意并非所有这些架构都由wasmCloud主机支持)
- x86
- x86_64
- arm
- aarch64
- mips
- mips64
附录B - 操作系统值
以下是一些可能的操作系统列表(注意并非所有这些操作系统都由wasmCloud主机支持)
- linux
- macos
- ios
- freebsd
- android
- windows
附录C - JSON Web Token 声明
以下是在标准JWT字段下的wascap
部分出现的自定义声明列表。这是组件声明嵌入到WebAssembly文件时所使用的相同嵌套样式
hashes
- 这是一个映射,其键是[架构]-[操作系统]
字符串,其值是该特定文件的哈希值。在已签名的令牌中包含这些哈希值意味着我们可以验证插件二进制文件没有被篡改。name
- 能力提供者的友好名称。vendor
- 帮助识别提供者的供应商字符串(例如,Redis
或Cassandra
或PostgreSQL
等)。这是一个信息字段,不作为任何类型的键或唯一标识符使用。version
- 友好版本字符串。revision
- 单调递增的修订值。此值将用于检索/存储特定版本的文件。config_schema
- 描述此能力提供者配置结构的可选JSON模式。
注意,当使用此库创建或附加到服务提供者归档时,JWT的声明在写入时生成,因为文件哈希值只有在文件写入归档后才可知。换句话说,如果你实例化了ProviderArchive
,在调用write
之前访问claims()
将返回None
。
依赖项
~15-25MB
~463K SLoC