#token #web #protobuf #jwt #binary-format #binary-encoding #encode-decode

protobuf-web-token

创建、验证和解码 protobuf 网络令牌

6 个版本 (破坏性更新)

0.5.0 2024年7月15日
0.4.0 2023年11月3日
0.3.0 2023年11月2日
0.2.0 2023年10月29日
0.1.1 2023年10月29日

#599认证

Download history 4/week @ 2024-06-05 39/week @ 2024-06-12 6/week @ 2024-06-19 96/week @ 2024-07-10 19/week @ 2024-07-17 13/week @ 2024-07-24 6/week @ 2024-07-31

每月 64 次下载

BSD-3-Clause

52KB
885

Protobuf Web Token (PWT)

针对不同语言实现令牌签名/验证/解码的库集合。该方法类似于在 JWT (Json Web Token) 中使用的方法。本README的其余部分假设您熟悉JWT的使用。

JWT 的不足之处

与紧凑的二进制编码(如 Protocol Buffers)相比,JSON 格式在传输数据方面效率较低。在大多数情况下,其大小更大,编码和解码所需时间更长。然而,JSON 的优点包括其可读性和无类型特性 - 客户端不需要知道服务器在响应中发送的所有键的所有值类型。但在您同时控制授权服务器和应用程序的情况下,这似乎反而成了缺点:存在错误的可能性,因为这种隐式依赖关系在编译时不会被捕获。

Protobuf 来拯救

因此,假设我们同时控制授权服务器和应用程序,我们可以做到“更好”(当然,这里仍然存在耦合权衡)。

我们引入一个 .proto 文件,其中包含我们希望在令牌中放入的数据。示例

  • 用户 ID
  • 用户名
  • 用户电子邮件
  • 角色或权限列表
  • ...

令牌还将包括标准化的元数据,目前只有一个字段

  • valid_until,令牌应过期的 Unix 时间戳

我们使用库或 protoc 插件生成用于语言的绑定。对于目前支持的语言,这些是

然后授权服务器可以使用 sign 方法对与您在 .proto 文件中定义的形状精确匹配的对象进行签名,客户端或其他服务器可以使用 verifydecode 来读取内容。

支持的加密算法

目前我们仅支持 Ed25519。因此,令牌无需包含需要使用哪种验证算法的信息,这也有助于进一步减少大小。

依赖项

~3–5.5MB
~103K SLoC