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 在 认证
每月 64 次下载
52KB
885 行
Protobuf Web Token (PWT)
针对不同语言实现令牌签名/验证/解码的库集合。该方法类似于在 JWT (Json Web Token) 中使用的方法。本README的其余部分假设您熟悉JWT的使用。
JWT 的不足之处
与紧凑的二进制编码(如 Protocol Buffers)相比,JSON 格式在传输数据方面效率较低。在大多数情况下,其大小更大,编码和解码所需时间更长。然而,JSON 的优点包括其可读性和无类型特性 - 客户端不需要知道服务器在响应中发送的所有键的所有值类型。但在您同时控制授权服务器和应用程序的情况下,这似乎反而成了缺点:存在错误的可能性,因为这种隐式依赖关系在编译时不会被捕获。
Protobuf 来拯救
因此,假设我们同时控制授权服务器和应用程序,我们可以做到“更好”(当然,这里仍然存在耦合权衡)。
我们引入一个 .proto
文件,其中包含我们希望在令牌中放入的数据。示例
- 用户 ID
- 用户名
- 用户电子邮件
- 角色或权限列表
- ...
令牌还将包括标准化的元数据,目前只有一个字段
valid_until
,令牌应过期的 Unix 时间戳
我们使用库或 protoc 插件生成用于语言的绑定。对于目前支持的语言,这些是
- prost 用于 Rust
- protoc-gen-elm 用于 Elm
然后授权服务器可以使用 sign
方法对与您在 .proto
文件中定义的形状精确匹配的对象进行签名,客户端或其他服务器可以使用 verify
或 decode
来读取内容。
支持的加密算法
目前我们仅支持 Ed25519。因此,令牌无需包含需要使用哪种验证算法的信息,这也有助于进一步减少大小。
依赖项
~3–5.5MB
~103K SLoC